mysql union 结果中的错误列

标签 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

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

只有一行单词部分是“car”,它在表e18中。

出于某种原因,我使用 us 得到的结果中的列名称被搞乱了,看起来我遗漏了什么,知道它是什么吗?

提前致谢。

最佳答案

Union 按列 位置 而非名称工作。但是你没有指定列位置,因为你做了 * 所以它是按照数据库选择的某种顺序,但不是你选择的。

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

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

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

使用 * 被认为是不好的做法:你不知道你得到了什么,如果你只需要一些列然后使用 * 检索更多数据然后必要的,使事情变慢。

顺便说一句,像这样(按数字)命名列是非常糟糕的编程习惯。你到底是怎么把事情弄直的?你的列有数字,你的表有数字。您是否正在尝试编写混淆代码?为了确保没有其他人可以处理您的代码?因为如果你是,这是一种方法。

关于mysql union 结果中的错误列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11714577/

相关文章:

collections - Neo4j 中的并集和计数集合

php - Mysql Select 从现在到 future 7​​天的记录

mysql - mysql 中的数据类型文本(Ruby on Rails)

mysql - 使用 INNER JOIN 的 SQL 查询

mysql - 从表中选择数据

mysql联合查询,每个联合上都有单独的别名

mysql - 子查询和联合

mysql - 查询中的 SQL 查询返回多个结果

javascript - 扩展独占联合的 typescript 通用参数

php - Laravel 4.2 联盟