我正在尝试构建一个选择查询,它将获取 4 个表的所有列,然后按“名称”列排序并显示结果(所有表中都相同)。我仍在学习 MySQL 的诀窍。
我发现由于列共享名称“name”,因此仅显示最后一个表的结果。有没有一种方法可以执行此查询并保留所有表中的所有数据?
我应该使用不同的列名称吗?共享一个名称似乎更容易,因为每个名称中的信息相同。
SELECT * FROM table_one, table_two, table_three, table_four ORDER BY...
四个表没有连接,结构不同......一些列名是共享的(看起来我应该修复它,我现在仍然可以),但每个表都有不同数量的列。
谢谢!
最佳答案
如果四个表之间没有关系,请使用 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
关于sql - mysql select查询帮助--ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2320128/