2017-02-08 5 views
0

я получил таблицу, как это:Mysql как выбрать значения из diffent столбцов в один столбец amoung друг с другом

+------+-------+ 
|yearIn|yearOut| 
+------+-------+ 
|1974 |2012 | 
+------+-------+ 
|1935 |2020 | 
+------+-------+ 
|1980 |1999 | 
+------+-------+ 

мне нужно выбрать все эти годы, и иметь их в одну колонку, как это:

+------+ 
|years | 
+------+ 
|1974 | 
+------+ 
|1935 | 
+------+ 
|1980 | 
+------+ 
|2012 | 
+------+ 
|2020 | 
+------+ 
|1999 | 
+------+ 

заранее спасибо за любую помощь :-)

ответ

3

Вы можете сделать это с помощью запроса, как это:

SELECT Years 
FROM (
    SELECT yearIn AS Years FROM yourTable 
    UNION ALL 
    SELECT yearOut FROM yourTable 
) y 
ORDER BY Years; 

вы также можете использовать это без подзапроса

SELECT yearIn AS Years FROM yourTable 
UNION ALL 
SELECT yearOut FROM yourTable 
ORDER BY Years; 

EXPLAIN и без подзапроса

mysql> EXPLAIN SELECT Years 
    -> FROM (
    ->  SELECT yearIn AS Years FROM yourTable 
    ->  UNION ALL 
    ->  SELECT yearOut FROM yourTable 
    ->) y 
    -> ORDER BY Years; 
+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+----------------+ 
| id | select_type | table  | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra   | 
+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+----------------+ 
| 1 | PRIMARY  | <derived2> | NULL  | ALL | NULL   | NULL | NULL | NULL | 6 | 100.00 | Using filesort | 
| 2 | DERIVED  | yourTable | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL   | 
| 3 | UNION  | yourTable | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL   | 
+----+-------------+------------+------------+------+---------------+------+---------+------+------+----------+----------------+ 
3 rows in set, 1 warning (0,00 sec) 

mysql> 
mysql> EXPLAIN  SELECT yearIn AS Years FROM yourTable 
    ->  UNION ALL 
    ->  SELECT yearOut FROM yourTable 
    ->  ORDER BY Years; 
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+ 
| id | select_type | table  | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra       | 
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+ 
| 1 | PRIMARY  | yourTable | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL       | 
| 2 | UNION  | yourTable | NULL  | ALL | NULL   | NULL | NULL | NULL | 3 | 100.00 | NULL       | 
| NULL | UNION RESULT | <union1,2> | NULL  | ALL | NULL   | NULL | NULL | NULL | NULL |  NULL | Using temporary; Using filesort | 
+----+--------------+------------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+ 
3 rows in set, 1 warning (0,00 sec) 

mysql> 
+0

Почему подзапрос? Кроме того, кто сказал, что мы хотим дублировать? – shmosel

+0

@shmosel - который дублирует? –

+0

В этом примере нет, но это может быть возможно. – shmosel