选择UNION但限制每个子查询并接收不同的值

lvi*_*vil 7 mysql sql

我有一张桌子,想要一个订单获得15个值,另一个订单获得15个值.目标是获得30个不同的价值观.
这是我的代码:

 (SELECT * FROM table1 WHERE criteria ORDER BY views DESC LIMIT 15)  
  UNION All  
 (SELECT * FROM table1 WHERE criteria ORDER BY date_upload DESC LIMIT 15) 
Run Code Online (Sandbox Code Playgroud)

我知道如何使用两个查询(使用NOT IN)完成任务,但是有没有办法在一个查询中完成它?

Joc*_*lyn 3

如有必要,请将“id”替换为主键的名称:

(SELECT * FROM table1 WHERE criteria ORDER BY views DESC LIMIT 15)
UNION
(SELECT * FROM table1 WHERE criteria AND id NOT IN(SELECT id FROM table1 WHERE criteria LIMIT 15) ORDER BY date_upload DESC LIMIT 15)
Run Code Online (Sandbox Code Playgroud)

此查询:
- 选择按视图排序的前 15 条匹配条件的记录
- 选择不在第一个 SELECT 中的前 15 条匹配条件,并按 date_upload 对它们进行排序

通过此查询,每次表 1 中有 30 条不同的记录可用时,您将确保获得 30 条记录。