mysql联合结果中的错误列

Ras*_*ker 3 mysql union

使用 union 时我得到了错误的列名称。

这就是我所做的,我有两个非常大的表,具有相同的结构和不同的记录,所以就是这样。

mysql> select * from e18 where `15` like '%car%' limit 1;
+------+------+----+------+------+------+------+------+------+------+------+------+------+------+------+-------------+------+------+------+------+------+------+--------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+-----------+
| id   | 1    | 2  | 3    | 4    | 5    | 6    | 7    | 8    | 9    | 10   | 11   | 12   | 13   | 14   | 15          | 16   | 17   | 18   | 19   | 20   | 21   | 22     | 23   | 24   | 25   | 26   | 27   | 28   | 29   | 30   | 31   | 32   | 33   | 34   | 35   | 36   | 37   | 38        |
+------+------+----+------+------+------+------+------+------+------+------+------+------+------+------+-------------+------+------+------+------+------+------+--------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+-----------+
| 2730 | 2730 | 18 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | cars: stuff | NULL | NULL | NULL | NULL | NULL | NULL |  5  1  | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | yy        |
+------+------+----+------+------+------+------+------+------+------+------+------+------+------+------+-------------+------+------+------+------+------+------+------+--------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+-----------+
1 row in set

mysql> (select * from e8 where `15` like '%car%') union
(select * from e10 where `15` like '%car%') union
(select * from e18 where `15` like '%car%') limit 1;");
+------+------+----+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------+------+------+------+------+------+------+------+--------+------+------+------+------+------+------+------+------+------+------+------+------+------+-----------+
| id   | 1    | 2  | 3    | 4    | 5    | 6    | 7    | 8    | 9    | 10   | 11   | 12   | 13   | 14   | 16   | 17          | 18   | 19   | 20   | 21   | 22   | 23   | 24   | 25     | 26   | 27   | 28   | 29   | 30   | 31   | 32   | 33   | 34   | 35   | 36   | 37   | 38   | 15        |
+------+------+----+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------+------+------+------+------+------+------+------+--------+------+------+------+------+------+------+------+------+------+------+------+------+------+-----------+
| 2730 | 2730 | 18 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | cars: stuff | NULL | NULL | NULL | NULL | NULL | NULL | NULL |  5  1  | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | yy        |
+------+------+----+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------+------+------+------+------+------+------+------+--------+------+------+------+------+------+------+------+------+------+------+------+------+------+-----------+
1 row in set
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Union all 和 union 返回相同的结果。

只有一行包含单词“car”,位于表 e18 中。

由于某种原因,我从使用中得到的结果中的列名被搞乱了,看起来我错过了一些东西,你知道它是什么吗?

提前致谢。

Ari*_*iel 5

联合按列位置而不是名称进行工作。但是您尚未指定列位置,因为您*这样做了,它是按数据库选择的某种顺序排列的,而不是由您选择的。

最终结果集的名称是联合中第一个查询中的列的名称。

解决方法很简单:写出所需的所有列的名称,并确保所有三个查询之间的顺序保持一致。

这些列不按名称排序(因此重命名列对您没有帮助),顺序是数据库中的一些内部顺序。

使用*被认为是不好的做法:您不知道自己会得到什么,并且如果您只需要某些列,那么使用会*检索更多的数据,从而使速度变慢。

顺便说一句,像这样(按数字)命名列是非常糟糕的编程习惯。你到底如何让事情保持正轨?你的列有数字,你的表格有数字。您是否想编写混淆的代码?确保没有其他人可以使用您的代码?因为如果你是的话,这是一种方法。