2017-02-08 17 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; 

使用和不使用子查询

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

相关问题