ЗАКАЗАТЬ ПО в запросе UNION - PullRequest
       20

ЗАКАЗАТЬ ПО в запросе UNION

0 голосов
/ 21 сентября 2011

Я видел темы, объясняющие это, но в моем случае это не работает.

У меня есть запрос

( SELECT * FROM my_table
left join table2 on table2.id = my_table.id
left join table3 on pension.age = my_table.age

  WHERE table3.id IS NULL )

UNION

( SELECT * FROM my_table
left join table2 on table2.id = my_table.id
left join table3 on pension.age = my_table.age
  WHERE my_table.id FROM 75 to 245 )

ORDER BY my_table.id ASC, table2.wage DESC, table3.compensation DESC

, это не работает, говоря user_table.или таблица2.или таблица3.не найдено

, когда я удаляю его, говоря:

ORDER BY id ASC, wage DESC, compensation DESC

, это несколько работает, но не желаемый результат.пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 21 сентября 2011
SELECT * FROM my_table
    left join table2 on table2.id = my_table.id
    left join table3 on pension.age = my_table.age
WHERE my_table.id IS NULL OR my_table.id FROM 75 to 245
ORDER BY my_table.id ASC, table2.wage DESC, table3.compensation DESC

Я заменил ваш "table_fired" на "my_table" и объединил два подвыбора в один.

0 голосов
/ 21 сентября 2011

Операция объединения требует, чтобы каждый из ваших двух запросов имел одинаковое количество столбцов в наборе результатов.В 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
0 голосов
/ 21 сентября 2011

Часть кода отсутствует? Я не вижу ссылки на table_fired. Кроме того, разве эти фигурные скобки не используются как часть внешнего соединения в большем запросе? Вот почему я думаю, что пропущена большая часть запроса, что может быть актуально.

...