#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