Подтвердить что ты не робот

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), но не может найти ответа.

4b9b3361

Ответ 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)