当使用 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 |
+----+-------+
我有两个 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 |
+----+-------+