2013-05-24 2 views
0

Я использую оператор UNION для выбора результатов из двух разных таблиц. Я хочу, чтобы результаты из первого результата таблицы приходили к тем из второй таблицы.Сортировка результатов запроса UNION, объединяющего две таблицы по исходной таблице

Например: у меня есть таблицы customer_coupons и segment_coupons. Обе таблицы имеют столбец с именем coupon_id. Когда я запускаю запрос, включающий UNION этих двух таблиц, он возвращает правильные записи, но это не тот порядок, который я хочу: он дает мне coupon_ids обеих таблиц, смешанных в порядке возрастания, но я хочу показать ALL coupon_ids первая таблица, а затем ВСЕ купон_доты второй таблицы.

Вот запрос, как она существует в настоящее время:

ВЫБРАТЬ coupon_id ИЗ customer_coupons UNION ВЫБРАТЬ coupon_id ОТ segment_coupons;

Как это изменить, чтобы все результаты первой половины запроса приходили ко всем результатам второй половины?

+0

то вы можете использовать предложение по предложению. – Drew

+0

Если вы хотите показать * all * coupon ids из обеих таблиц, тогда ваш пример запроса должен использовать 'union all', а не' union'. 'union' удаляет дубликаты. –

ответ

1

Put в фиксированной таблице идентифицирующие поля:

(SELECT 1 AS source_table, coupon_id 
FROM customer_coupons) 

UNION ALL 

(SELECT 2 AS sourcE_table, coupon_id 
FROM segment_coupons) 

ORDER BY source_table, coupon_id 

Обратите внимание на скобки вокруг отдельных запросов. Это заставляет MySQL применять order by к результату объединения, а не к подзапросу 2.

+0

Почему объединение все необходимо, добавление source_table предотвращает дублирование; если мы не считаем, что сами таблицы имеют дубликаты в них ... – xQbert

+0

Сила привычки. Я слишком часто укусил ненужные запросы. –

0
SELECT * FROM (
SELECT coupon_id, 1 as myorder 
FROM customer_coupons 
UNION 
SELECT coupon_id 2 as myorder 
FROM segment_coupons) 
Order by myorder 
Смежные вопросы