按日期排序行从多个表中收集?

问题描述 投票:0回答:2

例如,我有以下表格:

表一:

 -------------------------
|   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。

mysql sql mariadb
2个回答
1
投票

在查询中,您可以单独对表中的每个结果集进行排序,以对检索到的行应用限制。

如果您想保留合并结果集的顺序,则需要再次应用它。使用子查询来实现此目的。您需要进一步传递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

0
投票

我尝试使用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
© www.soinside.com 2019 - 2024. All rights reserved.