我有一个包含多个 type
值的表,我想从其中的一些值中获取示例记录。
我目前的查询如下:
-- Pulling three sample records from each "type"
SELECT * FROM example WHERE type = "A" LIMIT 3
UNION ALL
SELECT * FROM example WHERE type = "B" LIMIT 3
UNION ALL
SELECT * FROM example WHERE type = "C" LIMIT 3
;
我预计这会返回总共 9 条记录; 3 个来自 type = "A"
,3 个来自 type = "B"
,3 个来自 type = "C"
。
但是,我实际收到的结果是 type = "A"
的 3 条记录 ,没有别的。
我知道存在其他 type
值是因为我可以运行单独的 SELECT
语句并返回结果。
为什么 MySQL 只返回 3 条记录,我怎样才能让它返回我想要的完整 9 条记录?
我创建了一个 SQL Fiddle 来说明这个问题:http://sqlfiddle.com/#!9/d911c/2
最佳答案
使用括号:
(SELECT * FROM example WHERE type = "A" LIMIT 3)
UNION ALL
(SELECT * FROM example WHERE type = "B" LIMIT 3)
UNION ALL
(SELECT * FROM example WHERE type = "C" LIMIT 3);
这记录在 manual 中:
To apply ORDER BY or LIMIT to an individual SELECT, place the clause inside the parentheses that enclose the SELECT:
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
关于mysql - LIMIT 和 UNION ALL 未返回请求的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31814155/