【问题标题】:How to merge data from two tables with some common fields如何将两个表中的数据与一些常用字段合并
【发布时间】:2019-06-05 16:45:24
【问题描述】:

所以我有两个具有相似数据的表。表 A 中有与表 B 中的列匹配的列,但使用不同的命名约定,也有来自每个列的列在另一个表中没有等效项,不应该合并任何行,我需要一个视图(我认为)两个表中的行,但合并了一些列,因此表 A.columnB 中的数据和表 B.columnF 中的数据都最终出现在视图 C.columnD 中。视图中的某些列仅在其中一个表中具有源,并且在另一个表中的行中为空。我无法更改任何现有的表结构,因为数据库在多个应用程序之间共享。我想我需要在视图中使用一堆 FULL OUTER JOIN 语句,但我无法思考如何真正去做。如果有人可以提供一个通用示例来说明这应该是什么样子,我应该能够从那里得到它。

这是一个不起作用的示例(实际数据库中 JOIN 的每一侧都有更多列,为了便于阅读而被截断):

SELECT
    schedule_block.id as vid,
    schedule_block.reason as vreason,
    schedule_block.when_ts as vwhen,
    schedule_block.duration as vduration,
    schedule_block.note as vnote,
    schedule_block.deleted_ts as vdeleted_when,
    schedule_block.deleted_user_id as vdeleted_user_id,
    schedule_block.lastmodified_ts as vlastmodified_ts,
    schedule_block.lastmodified_user_id as vlastmodified_user_id
FROM schedule_block
FULL OUTER JOIN appointment.appt_when as vwhen ON 1 = 1
FULL OUTER JOIN appointment.patient_id  as vpatient ON 1 = 1
FULL OUTER JOIN appointment.duration as vduration on 1 = 1
FULL OUTER JOIN appointment.deleted_when as vdeleted_when ON 1 = 1

如果我错了,请纠正我,但我认为我不能使用 UNION,因为每边的列数不同

【问题讨论】:

  • 看起来像 UNION 的工作
  • 我不认为UNION 处理与其他表中的内容不匹配的列

标签: sql ruby-on-rails postgresql


【解决方案1】:

你可以这样做:

SELECT ColA, CONVERT(DATE, NULL) AS ColB
FROM T1
UNION ALL
SELECT CONVERT(VARCHAR(10), NULL) AS ColA, ColB
FROM T2

只要确保匹配数据类型。

【讨论】:

  • 所以我只需将NULL 转换为我需要的任何数据类型来处理不匹配的列并且这样可以吗?我现在要试试,不过理论上看起来很棒
  • @mrben522 就这么简单。
  • 看来在 PostgreSQL 中 NULL 不需要强制转换为数据类型,所以我不需要你的答案中的 CONVERT(... 部分,但我认为对于大多数 SQL 变体来说,这是必要的并且您肯定带领我走上了正确的道路,所以我将此答案标记为正确。
猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2015-05-14
  • 2022-12-06
相关资源
最近更新 更多