我正在使用 mysql 并且我有三个表 T1、T2、T3 它们包含如下数据:
+-------+
| t1.id |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
+-------+
| t2.id |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
+-------+
+-------+
| t3.id |
+-------+
| 1 |
| 2 |
| 3 |
+-------+
I want to be able to select data as follows:
id t1.id t2.id t3.id
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 null
5 5 null null
我该怎么做?
最佳答案
假设您打算使用 T1
作为基础 id
,一对 LEFT JOIN
将为您提供所需的结果:
SELECT
/* base id */
T1.id AS id,
/* Redundant t1.id */
T1.id AS t1_id,
T2.id AS t2_id,
T3.id AS t3_id
FROM
T1
LEFT JOIN T2 ON T1.id = T2.id
LEFT JOIN T3 ON T1.id = T3.id
请注意,这会多余地使用 T1.id
,但这正是您在建议输出中所拥有的内容,因此我在此处复制了它。
如果您真正想要的是从所有表中获取所有可能的 ID,请使用 UNION
进行连接。这会将三个表中不同的 ID 集组合成一个子查询 allids
,用作 LEFT JOIN
其他三个表中每个表的基本 ID。如果一个特定的 id 存在于 T2
但不 T1
那么它仍然会出现在输出中。
SELECT
allids.id AS id,
T1.id AS t1_id,
T2.id AS t2_id,
T3.id AS t3_id
FROM
( SELECT id FROM T1 UNION SELECT id FROM T2 UNION SELECT id FROM T3 ORDER BY id) allids
LEFT JOIN T1 ON allids.id = T1.id
LEFT JOIN T2 ON allids.id = T2.id
LEFT JOIN T3 ON allids.id = T3.id
关于mysql - 从mysql中的不同表中选择不相等的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11989248/