当使用UNION ALL组合时,如何在表之间交替排序结果?

时间:2015-10-13 16:17:21

标签: mysql sql-order-by

我有两张这样的表:

// colors           // numbers
+----+-------+      +----+--------+
| id | color |      | id | number |
+----+-------+      +----+--------+
| 1  | red   |      | 1  | zero   |
| 2  | blue  |      | 2  | one    | 
| 3  | green |      | 3  | two    |
+----+-------+      | 4  | four   |
                    | 5  | eight  |
                    +----+--------+

这也是我的疑问:

select * from colors
  union all
select * from numbers

现在,上面查询的结果是这样的:首先来自colors表的所有行,然后来自numbers表的所有行。但我不想要那种排序。我想要这个结果:

+----+-------+
| id | color |
+----+-------+
| 1  | red   |
| 1  | zero  |
| 2  | blue  |
| 2  | one   |
| 3  | green |
| 3  | two   |
| 4  | four  |
| 5  | eight |
+----+-------+

如何使用order by进行排序?

2 个答案:

答案 0 :(得分:2)

对我来说效果很好......

DROP TABLE IF EXISTS colors;

CREATE TABLE colors
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,color VARCHAR(12) NOT NULL
);

INSERT INTO colors VALUES
(1  ,'red'),
(2  ,'blue'),
(3  ,'green');

DROP TABLE IF EXISTS numbers;

CREATE TABLE numbers
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,number VARCHAR(12) NOT NULL
);

INSERT INTO numbers VALUES
(1  ,'zero'),
(2  ,'one'),
(3  ,'two'),
(4  ,'four'),
(5  ,'eight');

SELECT * FROM colors UNION ALL SELECT * FROM numbers ORDER BY id;
+----+-------+
| id | color |
+----+-------+
|  1 | red   |
|  1 | zero  |
|  2 | blue  |
|  2 | one   |
|  3 | green |
|  3 | two   |
|  4 | four  |
|  5 | eight |
+----+-------+

答案 1 :(得分:1)

试试这个:

... Order By 1,2

column #1排序,然后column #2