我有一张表,想从一个订单中获取 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)
我知道如何使用两个查询(使用 NOT IN )完成任务,但有没有办法在一个查询中完成?
最佳答案
如有必要,将“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)
这个查询:
- 选择按浏览量排序的前 15 条记录匹配条件
- 选择前 15 个匹配条件而不是在第一个 SELECT 中,并按 date_upload 排序
使用此查询,每次表 1 中有 30 条不同的记录时,您将确保获得 30 条记录。
关于mysql - 使用 UNION 选择但限制每个子查询并接收不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584941/