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

How to get the results ordered alternating between the tables when they have combined using UNION ALL?

我有两个 table 这样的:

// 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 table 中的所有行,然后是 numbers table 中的所有行。但我不想要那种排序。我想要这个结果:

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

如何使用 order by 进行这样的排序?

试试这个:

... Order By 1,2

要在 column #1 之前订购,然后 column #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 |
+----+-------+