SQL Выберите, чтобы вернуть 2 строки по одной для каждого столбца в таблице

#mysql #select

#mysql #выберите

Вопрос:

Пожалуйста, извините за мою способность сформулировать подходящее название.

У меня есть таблица со столбцами:

  ------- ---------- ------ ----- --------- ------- 
| Field | Type     | Null | Key | Default | Extra |
 ------- ---------- ------ ----- --------- ------- 
| name  | char(20) | YES  |     | NULL    |       |
| pri   | int(11)  | YES  |     | NULL    |       |
| sec   | int(11)  | YES  |     | NULL    |       |
 ------- ---------- ------ ----- --------- ------- 
  

с такими данными, как

  -------- ------ ------ 
| name   | pri  | sec  |
 -------- ------ ------ 
| first  |    1 |    2 |
| second |    3 |    4 |
| third  |    5 |    6 |
 -------- ------ ------ 
  

Я хотел бы выбрать, который даст результаты:

  -------- ------ 
| name   | addr |
 -------- ------ 
| first  |    1 |
| first  |    2 |
| second |    3 |
| second |    4 |
| third  |    5 |
| third  |    6 |
 -------- ------ 
  

Любая помощь будет оценена.

Комментарии:

1.Вы sec pri всегда будете равны 1?

Ответ №1:

Попробуйте это

 SELECT name, pri AS addr
FROM Table1
WHERE pri is NOT NULL

UNION ALL

SELECT name, sec AS addr
FROM Table1
WHERE sec is NOT NULL

order by 1,2
  

Комментарии:

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

Ответ №2:

Что-то вроде этого вернет указанный результирующий набор:

 SELECT p.name
     , p.pri AS addr
  FROM mytable p
 UNION ALL 
SELECT s.name
     , s.sec AS addr
  FROM mytable s
 ORDER BY 2 ASC
  

Ответ №3:

Что, если вы UNION выполните запрос, как показано ниже. Смотрите демонстрацию здесь http://sqlfiddle.com /#!2/b4338/2

 select name, pri as addr
from table1

union all

select name, sec as addr
from table1
order by addr