如何解决选择空字符串作为列时,SQL UNION考虑了字符数
我有两个使用UNION ALL合并的表。 Table1有1列在table2中不存在,而table2也有1列在table1中不存在。
起初,我不需要表2中不在表1中的列,而是在第二个选择中使用'' as Column1
进行了SELECT查询。这样就可以了。
但是,现在我还想检索仅存在于table2中的列。当我尝试执行与之前相同的操作时,最终在该列中只有空值。
结果表明查询正在考虑第一个选择语句中的字符数。因此,当我执行SELECT ' ' as Column2
时,将以table2中所有值的前2个字符结尾。反之亦然,因为我首先获得了实际值。但是现在我需要先创建一个空列,我不确定如何最好地做到这一点?当然,我可以只使用一个带有50个空格的字符串作为第一个选择,但是肯定有更好的方法吗?
解决方法
您似乎想要:
select t1.col1,t1.col2,t1.col3,null as col4
from table1 t1
union all
select t2.col1,t2.col2,null as col3,t2.col4
from table2 t2;
除非您确实想要一个空字符串,否则我建议使用NULL
而不是''
。
将NULL转换为VARCHAR(50)可以解决问题。
select t1.col1,CAST(null as VARCHAR(50)) as col4
from table1 t1
union all
select t2.col1,CAST(null as VARCHAR(50)) as col3,t2.col4
from table2 t2;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。