我有来自3个不同的不相关表的3个不同的SQL查询(全部使用LIMIT和ORDER BY).
我想根据"日期"字段(显示在所有字段中)合并和排序结果
执行此操作的SQL是什么?
Mar*_*ers 16
最好的方法是创建一个包含其他三个表中的公共字段的新表,并在公共日期字段上添加一个索引.原始的三个表应包含链接到公用表的外键.使用此设计,查询变得简单:
SELECT *
FROM common_table
ORDER BY "date" DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
如果还需要来自更具体表的数据,则可以使用LEFT JOIN在同一查询中选择该数据.
如果您无法更改设计并且性能不是问题,那么您可以使用UNION ALL在排序之前组合来自所有三个表的结果:
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
ORDER BY "date" DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
请注意,只有所有表具有相同的结构时,上述操作才有效.如果您在一个表中出现但在其他表中没有的字段,那么您应该从SELECT中省略它们,否则在其他表中为该列返回NULL.例如,如果:
table1有列a,b,c和date.table2有列b,c和date.table3有列a,c和date.然后用这个:
SELECT a, b, c, "date"
FROM table1
UNION ALL
SELECT NULL AS a, b, c, "date"
FROM table2
UNION ALL
SELECT a, NULL as b, c, "date"
FROM table3
ORDER BY "date" DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
SELECT.....
UNION ALL
SELECT....
UNION ALL
SELECT ...
ORDER BY date_field;
Run Code Online (Sandbox Code Playgroud)
为了获得最佳性能,请尽可能晚地应用ORDER BY/LIMIT,并在子查询中避免使用它.
| 归档时间: |
|
| 查看次数: |
17416 次 |
| 最近记录: |