You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取表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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:39:49