MySQL Как объединить два столбца в один столбец так, чтобы вывод второго столбца шел за первым столбцом в нескольких строках

#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 . . . Есть причина, по которой вы не приняли этот ответ? Это кажется самым простым ответом.