获取表B中号码对应表A内短信投递状态的SQL查询需求
获取跨表匹配手机号的短信投递状态
嘿,你的这个查询思路是完全没问题的!用IN子查询确实能精准拿到同时存在于safaricom_receipt和safar_dispute中的手机号对应的短信投递状态。不过我也可以给你补充几种等价的写法,方便你根据实际场景选择:
1. 你当前使用的IN子查询写法
这个写法逻辑直白,先从safar_dispute中提取所有手机号,再在safaricom_receipt里筛选匹配的记录:
SELECT address, delivery_status FROM safaricom_receipt WHERE address IN (SELECT mobile FROM saf_dispute);
如果safar_dispute里没有重复的手机号,这个写法简洁又好用,新手也能一眼看懂逻辑。
2. 改用INNER JOIN的写法
当两张表数据量比较大时,用INNER JOIN往往能获得更好的查询性能,因为数据库优化器更容易对JOIN操作生成高效的执行计划。而且INNER JOIN本身就是取两张表的交集,刚好契合你“同时存在于两张表”的需求:
SELECT sr.address, sr.delivery_status FROM safaricom_receipt sr INNER JOIN saf_dispute sd ON sr.address = sd.mobile;
注意:如果safar_dispute里存在重复的手机号,上面的查询会返回重复的结果。这时候可以加上DISTINCT来去重:
SELECT DISTINCT sr.address, sr.delivery_status FROM safaricom_receipt sr INNER JOIN saf_dispute sd ON sr.address = sd.mobile;
小提示
要确保safaricom_receipt.address和safar_dispute.mobile这两个字段的数据类型完全一致(比如都是VARCHAR(20)),避免因隐式类型转换导致的查询效率下降或者匹配错误哦。
内容的提问来源于stack exchange,提问作者Pascal Opar
相关产品推荐
相关产品推荐

