合并两个表,其中第一个表中未引用第二个表行

时间:2013-01-27 18:04:25

标签: sql postgresql postgresql-9.2

我正在重新发布我删除的上一个问题的更清晰版本。

如下面的示例所示,我希望仅当table_b的ID未出现在table_a的{​​{1}}中时,我才想将table_b合并到table_a }列。每个表对于它没有的任何字段应该具有空值。

示例:

表-A

table_b_id

表-B

+----+-------+------------+
| id | name  | table_b_id |
+----+-------+------------+
| 0  | mike  | 1          |
+----+-------+------------+
| 1  | jack  | 1          |
+----+-------+------------+

结果:

+----+-------+
| id | name  |
+----+-------+
| 0  | tom   |
+----+-------+
| 1  | joe   |
+----+-------+

1 个答案:

答案 0 :(得分:1)

您的问题几乎可以直接转换为查询。您希望查看表格 A ,但补充了来自 B 的行,其中id B 不在{{1 } A 。因此,以下table_b_id A B 的子集结合在一起,其中 B UNION不在{{1} }}:

id

请注意,对于第二组,我们选择table_b_idSELECT table_a.id AS original_id, table_a.name, table_a.table_b_id FROM table_a UNION ALL SELECT table_b.id AS original_id, table_b.name, NULL AS table_b_id FROM table_b WHERE table_b.id NOT IN (SELECT table_a.table_b_id FROM table_a) ,因为 A 没有此字段。