Пояснение:
Важно понимать, как это работает, чтобы избежать "ошибок" в подобных случаях использования. Обратите внимание, что синтаксис union
несколько «особенный»:
подсостояние union all
подсостояние union all
подсостояние [order by
-clause] [limit
-clause]
, где " subtatement " может быть опционально окружен (
и )
. Некоторые рабочие примеры:
Однако , если вы окружите первую " подстанцию " фигурными скобками, вы должны окружить все остальные " подстановку " s с фигурными скобками:
(Обратите внимание, что вышеупомянутый пункт не упоминается в официальных документах .)
В противном случае это синтаксическая ошибка:
Далее, каждое « подсостояние » может содержать where
, group by
, having
, join
, limit
, но не order by
.
Если вы хотите использовать order by
, « подстановка », содержащая order by
, должна быть заключена в фигурные скобки. (Это означает, что они больше не являются обязательными.)
Теперь, если мы снова посмотрим на синтаксис:
подсостояние union all
подсостояние union all
подсостояние [order by
-clause] [limit
-clause]
мы видим, что весь оператор union
заканчивается необязательным order by
/ limit
. Эти два ключевых слова применяются ко всему оператору union
, а не только к последнему " substatement ":
Мы уже упоминали ранее, что ключевое слово limit
может также применяться к отдельным " подстатьям " s:
Если вы хотите применить limit
к последнему « подстановке » (в отличие от всего оператора union
), вы должны окружить последний « подстанция"с фигурными скобками:
Чтобы применить limit
к последнему " подсостоянию " , а также ко всему оператору union
, используйте:
То же самое с order by
:
Но учтите, что применение order by
к " подсостоянию " является бессмысленным , поскольку в документах явно указано , что order by
гарантируется только ( ср. ) для работы применительно ко всему выражению union
:
* * & Тысяча сто семьдесят три puncsp; * +1174 * & Ndash; & раздел; & Ndash; * +1175 * & EnSP; ..use из ORDER BY
для отдельных операторов SELECT
ничего не говорит о порядке, в котором строки появляются в конечном результате ..
Единственный способ order by
будет иметь смысл в « подстановке », если вы объедините его с limit
:
& puncsp; & Ndash; & раздел; & Ndash; & EnSP; ..использование ORDER BY в этом контексте обычно связано с LIMIT
, так что оно используется для определения подмножества выбранных строк для извлечения для SELECT
, даже если оно не обязательно влияет на порядок этих строк в конечном UNION
результате.
Кроме того, если вы хотите объединить select <strong><em>into</em></strong>
с union
, будет больше "ловушек", на которые стоит обратить внимание. См. выпуск 32858 относительно этого.