我正在尝试构建一个select查询,它将获取4个表的所有列,然后按“name”列排序并显示结果(所有表中都相同)。我还在学习MySQL的绳索。
我发现因为列共享名称'name',所以只显示最后一个表的结果。有没有办法执行此查询,保留所有表中的所有数据?
我应该使用不同的列名吗?共享一个名称似乎更容易,因为每个名称都是相同的信息。
SELECT * FROM table_one, table_two, table_three, table_four ORDER BY...
四个表没有连接,结构不同......有些列名是共享的(看起来我应该修复,我现在还可以),但每个列都有不同的列数。
谢谢!
答案 0 :(得分:3)
如果四个表之间没有关系,请改用UNION
:
SELECT a.name
FROM TABLE_ONE a
UNION
SELECT b.name
FROM TABLE_TWO b
UNION
SELECT c.name
FROM TABLE_THREE c
UNION
SELECT d.name
FROM TABLE_FOUR d
ORDER BY name
这里有两个选项 - UNION
速度较慢,因为它会删除重复项 - 最终列表将是一个唯一的名称列表。 UNION ALL
更快,因为它不会删除重复项。
要从表格中获取列,请使用:
SELECT a.*,
b.*,
c.*,
d.*
FROM (SELECT a.name
FROM TABLE_ONE a
UNION
SELECT b.name
FROM TABLE_TWO b
UNION
SELECT c.name
FROM TABLE_THREE c
UNION
SELECT d.name
FROM TABLE_FOUR d) x
LEFT JOIN TABLE_ONE a ON a.name = x.name
LEFT JOIN TABLE_TWO b ON b.name = x.name
LEFT JOIN TABLE_THREE c ON c.name = x.name
LEFT JOIN TABLE_FOUR d ON d.name = x.name
答案 1 :(得分:0)
是的,你应该使用不同的列名,但是为了获得所有数据,你也可以写下这样的问题:
SELECT table_one.* t1, table_two.* t2, table_three.* t3, table_four.* t4 FROM table_one, table_two, table_three, table_four ORDER BY...
答案 2 :(得分:0)
johnny_n,
你应该使用
SELECT name as name1, name as name2, name as name3 etc...
显然,您需要使用正确的语法,但使用AS关键字,将允许您在查询中使用所需的密钥。
答案 3 :(得分:0)
如果他们共享相同的name
....
SELECT *
FROM table_one
LEFT JOIN
table_two USING(name)
LEFT JOIN
table_three USING(name)
LEFT JOIN
table_four USING(name)
ORDER BY name