让我们说:
表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)
。为什么这没有给出错误?
答案 0 :(得分:1)
UNION
只是将一个查询的行追加到另一个查询的行。只要两个查询返回相同数量的列,就不会出错。列名称始终来自第一查询。如果数据类型不同,它将找到可以将它们全部转换为的通用类型。在您的示例中,它将int
列转换为text
(MySQL对此很宽松,其他一些数据库要求您使用显式CAST()
调用才能将所有内容都转换为相同类型)。 / p>
由于每个查询都返回两列,因此结果中包含两列,并使用table1
中的列名。
答案 1 :(得分:0)
发表评论的时间有点长。
我刚刚在MySQL 8.0和SQLite上进行了测试,它返回:
a b
1 4
2 4
hoi hi
我觉得这很奇怪。我希望这些列被赋予整数类型,并且第三行会出现类型转换错误或0
。嗯,实际上SQLite的结果并不奇怪,因为类型在SQLite中更具可替代性。
SQL Server和Postgres会出现我期望的错误-导致查询失败的类型转换错误。