将LIMIT与UNION组合使用时的MariaDB的奇怪行为
SELECT `foo`
FROM `table`
WHERE `bar` = 'def'
LIMIT 1500;
...为条件(def)返回1500行。将LIMIT与UNION组合使用时的MariaDB的奇怪行为
(SELECT `foo`
FROM `table`
WHERE `bar` = 'abc'
LIMIT 1000)
UNION
(SELECT `foo`
FROM `table`
WHERE `bar` = 'def'
LIMIT 1500)
...返回2498行,1498为第二个条件(def)。
因此,您可以通过第一个查询的输出看到,条件“def”肯定有足够的记录返回1500行。不过,与UNION结合使用时,返回的记录太少。
有没有人有指示我跟踪这种行为?
行数可以减少,因为UNION只选择不同的结果..但你可以使用UNION ALL为让所有的结果都形成选择还包括行WITN相同的价值观
(SELECT `foo`
FROM `table`
WHERE `bar` = 'abc'
LIMIT 1000)
UNION ALL
(SELECT `foo`
FROM `table`
WHERE `bar` = 'def'
LIMIT 1500)
即使有重复:该表保存超过该查询中设置的LIMIT的10倍以上。因此,如果UNION删除重复项,则仍有足够的记录填满LIMIT。 – level20peon
这将意味着子查询首先被限制,然后分组?为了获得LIMIT定义的记录的确切数量,是否有一种方法可以解决这个问题,并且所有这些记录都是唯一的? – level20peon
如果你在你的情况下使用()之间的选择,那么首先查询按原样执行(选择和限制),然后执行查询(按sql分组)和UNION ..删除重复的行UNION ALL不删除重复的行。 – scaisEdge
我敢打赌,你将会看到他们,如果你'SELECT bar,foo'而不是'SELECT foo'(在两部分中)。然后你会看到他们发生了什么事。 –