Mysql 将LIMIT与UNION结合使用时MariaDB的奇怪行为

Mysql 将LIMIT与UNION结合使用时MariaDB的奇怪行为,mysql,union,limit,mariadb,Mysql,Union,Limit,Mariadb,。。。返回1500行条件(def) 。。。返回2498行,第二个条件(def)返回1498行 从第一个查询的输出可以看出,条件“def”肯定有足够的记录返回1500行。然而,当与UNION结合使用时,针对该条件返回的记录太少 有人给我一个指针来跟踪这种行为吗?行数可以减少,因为UNION select only distinct result.。但是您可以使用UNION ALL来获取所有结果,这两个select included表中都包含了值相同的行 (SELECT `foo` FROM `t

。。。返回1500行条件(def)

。。。返回2498行,第二个条件(def)返回1498行

从第一个查询的输出可以看出,条件“def”肯定有足够的记录返回1500行。然而,当与UNION结合使用时,针对该条件返回的记录太少


有人给我一个指针来跟踪这种行为吗?

行数可以减少,因为UNION select only distinct result.。但是您可以使用UNION ALL来获取所有结果,这两个select included表中都包含了值相同的行

(SELECT `foo` 
FROM `table`
WHERE `bar` = 'abc'
LIMIT 1000)
UNION
(SELECT `foo` 
FROM `table`
WHERE `bar` = 'def'
LIMIT 1500)

即使存在重复项:该表的容量是我在该查询中设置的限制的10倍以上。因此,如果联合删除了重复项,仍然有足够多的记录可以满足限制。这意味着子查询首先被限制,然后被分组?是否有办法扭转这种局面,以获得由限制定义的记录的确切数量,并使所有记录都是唯一的?如果在您的案例中使用select between(),则首先按原样执行查询(选择并限制),然后联合(在sql中分组参照group by)和UNION。。删除重复的行UNION ALL不删除重复的行。我敢打赌,如果您
选择bar,foo
,而不仅仅是
选择foo
(在两个部分中),您将看到它们。然后你会看到他们发生了什么。
(SELECT `foo` 
FROM `table`
WHERE `bar` = 'abc'
LIMIT 1000)
UNION
(SELECT `foo` 
FROM `table`
WHERE `bar` = 'def'
LIMIT 1500)
(SELECT `foo` 
 FROM `table`
 WHERE `bar` = 'abc'
 LIMIT 1000)
UNION ALL 
(SELECT `foo` 
 FROM `table`
 WHERE `bar` = 'def'
 LIMIT 1500)