【发布时间】:2012-05-01 13:41:57
【问题描述】:
假设我有 2 个或更多由不同列组成的表,其中不一定存在共享键 (id):
Alpha:
+----+-------+-------+-------+
| id | paula | randy | simon |
+----+-------+-------+-------+
| 1 | 8 | 7 | 2 |
| 2 | 9 | 6 | 2 |
| 3 | 10 | 5 | 2 |
+----+-------+-------+-------+
Beta:
+----+---------+-----+------------+------+
| id | is_nice | sex | dob | gift |
+----+---------+-----+------------+------+
| 2 | 1 | F | 1990-05-25 | iPod |
| 3 | 0 | M | 1990-05-25 | coal |
+----+---------+-----+------------+------+
Gamma:
+----+---------+--------+
| id | is_tall | is_fat |
+----+---------+--------+
| 1 | 1 | 1 |
| 99 | 0 | 1 |
+----+---------+--------+
想要的效果是在 id 插入 NULL 数据不可用时将表混合在一起:
+----+-------+-------+-------+---------+-----+------------+------+---------+--------+
| id | paula | randy | simon | is_nice | sex | dob | gift | is_tall | is_fat |
+----+-------+-------+-------+---------+-----+------------+------+---------+--------+
| 1 | 8 | 7 | 2 | | | | | 1 | 1 |
| 2 | 9 | 6 | 2 | 1 | F | 1990-05-25 | iPod | | |
| 3 | 10 | 5 | 2 | 0 | M | 1990-05-25 | coal | 1 | 1 |
| 99 | | | | | | | | 0 | 0 |
+----+-------+-------+-------+---------+-----+------------+------+---------+--------+
我可以使用 NULL 'dummy' 列和 UNION (MySql SELECT union for different columns?),但如果表的数量很大,这似乎是一种皇家痛苦。我想有一种 JOIN 方法可以用来完成此操作,但我需要一些帮助来解决此问题。
这行得通:
SELECT `id`, `paula`, `randy`, ..., NULL AS `is_nice`, ... FROM `Alpha`
UNION SELECT `id`, NULL AS `paula`, ..., FROM `Beta`
UNION SELECT `id`, NULL AS `paula`, ..., `is_fat` FROM `Gamma` ;
但它确实感觉像错误的方式来做到这一点。每当我想添加其他表时,我如何才能获得相同的结果,而不必编辑插入 NULL AS whatever 的 SQL 行和行?
提前致谢!
【问题讨论】:
-
实际上,您的查询不会那样工作。您将在结果中得到 7 行。