假设我们有:
表1
a (int) | b (int)
--------|--------
1 | 4
2 | 4
表2
c (text) d (text)
---------|---------
hoi | hi
查询:
SELECT * FROM table1
UNION
SELECT * FROM table2
产量
a | b
------|--------
1 | 4
2 | 4
hoi | hi
至少,从我刚刚在 mysql 上运行的查询来看
我期望(1, 4, NULL, NULL)
。为什么这不会给出错误?
最佳答案
UNION
只是将一个查询的行附加到另一个查询的行。只要两个查询返回相同数量的列,就不会出现错误。列名始终来自第一个查询。如果数据类型不同,它会找到它们都可以转换为的公共(public)类型;在您的示例中,它将 int
列转换为 text
(MySQL 对此很宽松,其他一些数据库要求您使用显式 CAST()
调用以使所有内容都为同一类型)。
由于每个查询都返回两列,因此结果包含两列,并使用 table1
中的列名称。
关于mysql - UNION有意想不到的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55695887/