mysql - 为什么带有方括号/圆括号的 UNION SELECT 返回不同的总行数

标签 mysql sql

当我运行此查询时:

SELECT 1, `name` FROM `table1` WHERE `reg` = 3 AND `lang` = 5
UNION
SELECT 2, `name` FROM `table1` WHERE `reg` = 1 AND `lang` = 2
UNION
SELECT 3, `name` FROM `table1` WHERE `reg` = 6 AND `lang` = 10

它返回:显示第 0 - 24 行(总共 435 行,查询花费了 0.0110 秒)

我需要使用LIMIT 5运行这些查询,因此我必须在每个select周围使用括号,在本例中是完全相同的查询,但带有括号和限制:

(SELECT 1, `name` FROM `table1` WHERE `reg` = 3 AND `lang` = 5 LIMIT 5)
UNION
(SELECT 2, `name` FROM `table1` WHERE `reg` = 1 AND `lang` = 2 LIMIT 5)
UNION
(SELECT 3, `name` FROM `table1` WHERE `reg` = 6 AND `lang` = 10 LIMIT 5)

返回以下内容:显示第 0 - 24 行(总共 17098 行,查询中 0 行,查询耗时 0.0020 秒)

我是不是做错了什么?

最佳答案

您的第二个查询与第一个查询不同,因为您在第二个查询中使用LIMIT 5

编辑:-

你可以试试这个:

(SELECT 1 as sort_col, `name` FROM `table1` WHERE `reg` = 3 AND `lang` = 5  LIMIT 5)
UNION
(SELECT 2, `name` FROM `table1` WHERE `reg` = 1 AND `lang` = 2 LIMIT 5)
UNION
(SELECT 3, `name` FROM `table1` WHERE `reg` = 6 AND `lang` = 10  LIMIT 5)
ORDER BY sort_col, `name`

来自MYSQL Docs :

To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one.

关于mysql - 为什么带有方括号/圆括号的 UNION SELECT 返回不同的总行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23103747/

相关文章:

mysql - 从 MySQL 获取类似查询

SQLite - 更新表以按顺序对行进行编号

sql - 如何避免隐式转换时出现无效数字

sql - Visual Studio 2013 SSDT - 编辑数据 - IS NULL 不能用作过滤器

mysql - 数据库设计动态表

MySQL DELETE 使用 Having 和 Count 的子查询

mysql - 如何将等于或小于今天的日期与mysql中的给定日期进行比较

MySQL 在函数内部调用过程进行计数

mysql - 从mysql中的另一个表导入列

sql - 我想在 sql server 中检索半年的一天