例如,我有以下表格:
表一:
-------------------------
| UID | Date |
-------------------------
| John | 2 |
| mark | 4 |
-------------------------
表二:
-------------------------
| UID | Date |
-------------------------
| smith | 1 |
| Nork | 3 |
-------------------------
我期望的结果是按日期排序:
----------
| smith |
| John |
| Nork |
| mark |
----------
我试过了:
(SELECT UID
FROM table1
ORDER BY DATE DESC
LIMIT 16)
UNION
(SELECT UID
FROM table2
ORDER BY DATE DESC
LIMIT 16)
但是结果它打印的是它首先获取table1及其所有行,然后它转到table2。
在查询中,您可以单独对表中的每个结果集进行排序,以对检索到的行应用限制。
如果您想保留合并结果集的顺序,则需要再次应用它。使用子查询来实现此目的。您需要进一步传递date
列以便能够这样做,因此我将UNION
更改为UNION ALL
,因为我们不需要在此级别应用它。在更高的水平,添加DISTINCT
将照顾独特的价值观。
SELECT DISTINCT UID
FROM (
(SELECT UID, DATE FROM table1 ORDER BY DATE DESC LIMIT 16)
UNION ALL
(SELECT UID, DATE FROM table2 ORDER BY DATE DESC LIMIT 16)
) t
ORDER BY DATE
我尝试使用mysql db这样的数据。它工作得很好。请试试这个:
SELECT t.UID FROM
(SELECT t1.UID,t.DATE FROM table1 t1
UNION ALL
SELECT t2.UID,t.DATE FROM table2 t2
) as t
ORDER BY t.DATE ASC