我注意到在 MySQL 中使用具有超过 16 列的 select 的多个联合时有非常奇怪的行为。我在一个复杂的查询中发现了这个问题,并将其简化以重现问题。我创建了dbfiddle来演示这个问题。确实很奇怪,第一个查询正在对列值进行左移,任何人都可以解释为什么会发生这种情况吗?
WITH test1
AS (SELECT 1 AS a, 2 AS b, 3 AS c, 4 AS d, 5 AS e,
6 AS f, 7 AS g, 8 AS h, 9 AS i, 10 AS j,
11 AS k, 12 AS l, 13 AS m, 14 AS n, 15 AS o,
16 AS p, 17 AS q),
test2
AS (SELECT 1 AS a, 2 AS b, 3 AS c, 4 AS d, 5 AS e,
6 AS f, 7 AS g, 8 AS h, 9 AS i, 10 AS j,
11 AS k, 12 AS l, 13 AS m, 14 AS n, 15 AS o,
16 AS p, 17 AS q),
unionTest
AS (SELECT * FROM test1
UNION
SELECT * FROM test2)
SELECT * FROM unionTest WHERE 1 = 2
UNION
SELECT * FROM unionTest WHERE 1 = 1;
Run Code Online (Sandbox Code Playgroud)
退货
| A | 乙 | C | d | e | F | G | H | 我 | j | k | 我 | 米 | n | 哦 | p | q |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 号 | 0 |
我在 postgres 中尝试了同样的事情,效果很好。我没有看到任何逻辑解释为什么这在 MySQL 中不起作用。MySQL版本是8.0.28