【发布时间】:2013-12-22 15:44:37
【问题描述】:
在构建查询以显示来自 2 个表的结果,其中 2 个相同但第三个不同(字段较少但共享需要在结果中返回的 4 列),构建查询?
表1:sku field1 field2 field3 field 4 field 5 field 6 field 7
表2:sku field1 field2 field3 field 4 field 5 field 6 field 7
表 3:sku 字段 1 字段 2 字段 3 字段 4
这两个当然都失败了:
SELECT * FROM table1 UNION SELECT * FROM table2 UNION SELECT * FROM table3 ORDER BY sku ASC
SELECT * FROM table1 UNION SELECT * FROM table2 UNION SELECT sku, field1, field2, field3, field4 FROM table3 ORDER BY sku ASC
在另一个SO post 中,我看到查询在哪里使用 NULL AS 字段名来使表等于查询,但是如果 table1 和 table2 说 80 个字段而 table3 有 5 个,这是否意味着我必须添加 NULL AS 字段名6 ...7...8....> 75 个字段?
只是一时兴起,我尝试如下,但也失败了:
SELECT * FROM table1 UNION SELECT * FROM table2 UNION SELECT sku, field1, field2, field3, field4, NULL AS * FROM table3 ORDER BY sku ASC
感谢您的帮助。
【问题讨论】:
-
你真的需要做一个SELECT *吗?您不能只选择您需要的字段,还是您真的需要每个字段?
-
实际的表(1 和 2)实际上有 75 个字段,其中 23 个字段需要查询。全选似乎比列出 23 个列名的查询更好
-
哇,这是一个粗壮的查询! :D
-
列出列名。在生产代码中使用星号(不包括它们在 EXISTS/NOT EXISTS 子句中的使用)不是一个好习惯。如果写出列名是痛苦,那么请熟悉 information_schema 并使用它来生成可以复制和粘贴的列名列表。