含空记录的多表(单表)联合查询

表名: t_mailother53
需查询的数据如下

INFO4INFO10
(NULL)(NULL)
1 106
111107

如果不进行判断直接执行一下语句:

SELECT INFO4
FROM t_mailother53 WHERE MAILID = '10' AND INFO10 = '05'
UNION ALL
SELECT INFO4
FROM t_mailother53 WHERE MAILID = '10' AND INFO10 = '06'
UNION ALL
SELECT INFO4
FROM t_mailother53 WHERE MAILID = '10' AND INFO10 = '07';

查询结果为:

INFO4
1 1
1111

在取值时,因UNION 以及 UNION ALL对无记录的数据无效,所以取值的时候,会将所有数据前移去填补空缺的数据,例如
原本应是:
a[0] = null,a[1]=a[1],a[2]=a[2];
现在变成了:
a[0] = a[1],a[1]=a[2],a[2]=null;
取值顺序错乱,导致后续操作全错,这就需要添加IF判断,
可以先用COUNT()函数获取记录条数:COUNT(INFO4),
再通过IF判断,当COUNT(INFO4)为0时,即无INFO10='05’的记录时,为查询结果赋值NULL,
结合完善后SQL语句如下:

SELECT IF(COUNT(INFO4)=0,NULL,INFO4) INFO4
FROM t_mailother53 WHERE MAILID = '10' AND INFO10 = '05'
UNION ALL
SELECT IF(COUNT(INFO4)=0,NULL,INFO4) INFO4
FROM t_mailother53 WHERE MAILID = '10' AND INFO10 = '06'
UNION ALL
SELECT IF(COUNT(INFO4)=0,NULL,INFO4) INFO4
FROM t_mailother53 WHERE MAILID = '10' AND INFO10 = '07';

查询结果为:

INFO4
(NULL)
1 1
1111

这样取值时就不会担心数据错位。
注:
使用UNION 查询到相同数据时,只会显示一条数据,所以此处用UNION ALL,详情请参考:https://www.w3school.com.cn/sql/sql_union.asp
在进行多表查询时,要确保不同表中需查询的字段名和字段类型一致,每次查询语句查询的字段数一致,即SELECT后的字段名一致,请勿出现一下请况:

SELECT INFO3
FROM t_mailother51 WHERE MAILID = '10' AND INFO10 = '05'
UNION ALL
SELECT INFO4,INFO5
FROM t_mailother52 WHERE MAILID = '10' AND INFO10 = '06'
UNION ALL
SELECT INFO4
FROM t_mailother53 WHERE MAILID = '10' AND INFO10 = '07';
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值