如何解决各列中的数据类型在UNION查询之间不需要兼容
我读过here以便能够使用SQL UNION查询,
每列中的数据类型在各个查询之间必须兼容。
因此select a,b from table1 UNION select c,d from table2
,要使此查询正常工作,我们需要a
和c
数据类型才能兼容。
但是,当我尝试进行测试时,在插入后将表users
包含两个列(id int,name varchar(15))
,将表calc
包含两个值(x int,y int)元素
(1,'saad')放入表users
,值(3,5)放入表calc
,并尝试查询select * from users union select * from calc;
,它显示结果如下,没有任何错误:
1 | saad
3 | 5
尽管name
和y
数据类型不兼容,并且应该引起错误
Conversion failed when converting the int value 5 to data type varchar
我认为这可能是浏览器特定的行为,因此我也在google chrome中尝试了此操作,但它也没有任何错误!
有人可以向我解释为什么吗? 预先感谢。
编辑:
我正在使用MySql 5.6
解决方法
使用MS SQL,UNION和UNION ALL之间是有区别的。
对于UNION查询,将在所有select子句中将该列的每个值与每个其他值进行比较。这可能导致最终结果中的记录少于原始select子句结果中的记录。即使您不打算这样做,优化器也会比较a和c以及b和d的值以找到这两个集合的共同点。这也意味着,如果数据类型不同,则通过隐式数据转换为sql_variant来实现联合请求的目标。
由于UNION ALL只是将集合彼此堆叠在一起,因此比较这些值的需求减少了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。