UNION ALL и LIMIT в MySQL
Скажем, я хочу выполнить этот запрос:
(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION ALL
(SELECT a FROM t2 WHERE a=11 AND B=2)
UNION ALL
(SELECT a FROM t3 WHERE a=12 AND B=3)
ORDER BY a LIMIT 1000;
Является ли MySQL достаточно умным, чтобы пропустить "t3", если 550 результатов доступны в "t1" и 450 в "t2"?
Я смотрю на документы MySQL ( http://dev.mysql.com/doc/refman/5.1/en/union.html), но не может найти ответа.
Ответы
Ответ 1
Как указано в описании синтаксиса UNION (http://dev.mysql.com/doc/refman/5.1/en/union.html):
Поведение UNION по умолчанию заключается в том, что повторяющиеся строки удаляются из результат. Дополнительное ключевое слово DISTINCT не имеет никакого эффекта, кроме потому что он также указывает удаление дубликатов строк. С необязательное ключевое слово ALL, дубликат строки удаление не происходит, и результат включает все соответствующие строки из всех инструкции SELECT.
Я полагаю, что ответ на ваш вопрос.
Ответ 2
Это работает для меня. Я использую MySQL.
но убедитесь, что предельное число всегда одинаково для всех
в этом примере он получает 3 результата из каждой таблицы
(SELECT a FROM t1 WHERE a=10 AND B=1 LIMIT 9)
UNION ALL
(SELECT a FROM t2 WHERE a=11 AND B=2 LIMIT 9)
UNION ALL
(SELECT a FROM t3 WHERE a=12 AND B=3 LIMIT 9)