我有一个问题:
SELECT * FROM TABLE_NAME
WHERE category=1 AND NUMBER=4 OR NUMBER=10
ORDER BY RANDOM() LIMIT 10
我希望这个查询的结果是一个随机的5行,其中category = 1,number = 4,还有一个随机的5行,其中category = 1,number = 10。 所以它应该等于(!)在AND之后的WHERE中指定的行数(五个结果,数字= 4,五个结果,数字= 10)。例如,如果将LIMIT 10更改为LIMIT 20,则第一个结果必须为10行,第二个结果必须为10行。 如果我运行由我编写查询它会随机生成,例如7行数字= 4,3行数字= 10。
是否可以实现这一点,或告诉我可以用什么来实现这样的结果?
答案 0 :(得分:1)
使用union all
的正确语法:
(SELECT t.*
FROM TABLE_NAME t
WHERE category = 1 AND NUMBER = 4
ORDER BY RAND()
LIMIT 10
) UNION ALL
(SELECT t.*
FROM TABLE_NAME t
WHERE category = 1 AND NUMBER = 10
ORDER BY RAND()
LIMIT 10
);
这假设每个组都有足够数量的记录。
rand()
对于您想要完成的任务可能不是必需的。如果你有大量的数据,那么它会增加很多开销。