#mysql #sql
#mysql #sql
Вопрос:
Как объединить два столбца в один столбец Таким образом, чтобы вывод второго столбца шел за первым столбцом в нескольких строках без использования ОБЪЕДИНЕНИЯ в одном запросе.
например,:
column1 column2
1 3
2 4
ожидаемый ОП:
column1
1
2
3
4
Комментарии:
1. Уникальны ли значения столбца: по столбцу? по всей таблице?
2. да, все значения столбца уникальны
3. Почему вы не можете использовать ОБЪЕДИНЕНИЕ?
Ответ №1:
без использования ОБЪЕДИНЕНИЯ в одном запросе
SELECT DISTINCT CASE WHEN t00.id = t01.id
THEN t1.column1
ELSE t2.column2
END all_values
FROM ( SELECT column1 id
FROM test
ORDER BY 1
LIMIT 2 ) t00
CROSS JOIN ( SELECT MIN(column1) id
FROM test ) t01
CROSS JOIN test t1
CROSS JOIN test t2
ORDER BY 1
Таблица должна содержать не менее 2 строк.
Применимо для версии MySQL 5.x.
Ответ №2:
union all
правильный подход:
select column1 as col
from t
union all
select column2
from t
order by col;
Вы также можете использовать cross join
с union all
в подзапросе:
select (case when seqnum = 1 then column1 else column2 end) as col
from t cross join
(select row_number() over () as seqnum
from t
limit 2
) tt
order by col;
Комментарии:
1. Условия вопроса заключаются в том, что нельзя использовать ОБЪЕДИНЕНИЕ. Я не знаю почему.
2. @BillKarwin . . . Я обновил ответ. Я думаю, важно указать, что
union all
это, вероятно, правильный подход к проблеме в MySQL.3. Я согласен
union all
, это правильный подход.union
также сработало бы, поскольку в OP указано, что значения уникальны.4. @manoj . . . Есть причина, по которой вы не приняли этот ответ? Это кажется самым простым ответом.