0

我正在重新发布我删除的先前问题的更清晰版本。

如下面的示例所示,我只想在' 的 id 没有出现在'列中时才table_b合并。每个表对于它没有的任何字段都应该有一个空值。table_atable_btable_atable_b_id

例子:

表_a

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

表_b

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

结果:

+-------------+-------+------------+
| original_id | name  | table_b_id |
+-------------+-------+------------+
| 0           | mike  | 1          |
+-------------+-------+------------+
| 0           | tom   |            |
+-------------+-------+------------+
| 1           | jack  | 1          |
+-------------+-------+------------+
4

1 回答 1

1

您的问题几乎可以直接翻译成查询。您希望查看表A已查询但补充了 B 中的行id其中B的任何一个都不在table_b_idA。因此,以下UNIONA与 B 的子集组合id在一起,其中B不在table_b_id

SELECT 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)

请注意,对于第二组,我们选择NULLastable_b_id因为A没有此字段。

于 2013-01-27T18:24:35.430 回答