mysql - LIMIT 和 UNION ALL 未返回请求的记录数

标签 mysql sql

我有一个包含多个 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);

Demo here

这记录在 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/

相关文章:

mysql - 内置MySQL帮助文档

php - 使用 PHP 和页面安全性将记录添加到 MySQL

mysql - 如何在一个 SQL 查询中选择同一个表中的相关项

sql - Foxbase 到 postgresql 数据传输。 (dbf 文件阅读器)

sql - 将列表传递给SQL每行调用Groovy

java - mysqldump 在 java 中不起作用

mysql - 如何在 MySQL 存储的_function_ 中评估一个简单的数学公式?

mysql - SQL "replace"语法问题

mysql - 如何在 SQL 中添加/减去上一行?

mysql - 在 MySQL 上创建类型