Операция объединения требует, чтобы каждый из ваших двух запросов имел одинаковое количество столбцов в наборе результатов.В mysql UNION всегда будет использовать имена столбцов из запроса frist - поэтому, если во втором запросе используются разные имена столбцов, они будут отображаться по порядку в столбцы, которые были определены в первом запросе.
Ваш ORDER BY
будет применен после UNION
, и поэтому он может только ссылаться на столбцы, которые находятся в наборе результатовUNION.Эти столбцы не ограничены идентификаторами таблиц из составных запросов (поэтому удаление идентификаторов таблиц из вашего предложения ORDER BY избавляет от явных ошибок).
Помимо этого, проблема заключается в том, чтовероятно, что ваши запросы компонентов создают несколько столбцов, которые имеют одинаковое имя и различаются только по идентификаторам таблиц (например, my_table.id
и table2.id
).Когда вы используете ORDER BY id ASC ...
, какие из этих полей "id" будут использоваться?
Решите эту проблему, заменив *
явным списком соответствующих столбцов для каждого из двух запросов компонентов.Убедитесь, что каждому выбранному столбцу присвоено уникальное имя.Например:
SELECT
my_table.id as my_table_id,
table2.id as table2_id,
table2.compensation as compensation,
table3.wage as wage
...
Ваш союз затем выберет столбцы с четко именованными именами, и в вашем заказе по предложению потребуется сослаться на эти столбцы вместо табличных в исходных запросах:
ORDER BY my_table_id ASC, wage DESC, compensation DESC