当我运行此查询时:
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/