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

SQL查询:从表A提取不在表B中的指定条件的user_id与phone_number

解决方案:获取符合条件的去重用户ID和手机号

首先,我们来明确你的核心需求:从表trxns(即你提到的表A)中提取去重的memid(用户ID)和phone_number,需同时满足以下条件:

  • phone_number以指定前缀(233703/06/07/04)开头
  • dateadded处于2018-01-18至2018-08-18的时间范围内
  • 该用户ID(memid)不存在于tickets表(表B)的pid字段中

现有查询的问题

你的当前查询存在几个关键问题:

  • 字段名不匹配:表结构定义的是phone_number,但查询中误用了phonenum
  • 错误关联了表B的手机号条件:我们只需要过滤表A的手机号,无需判断表B的手机号前缀
  • 返回字段不符合需求:你需要的是user_id和phone_number,但当前仅返回了手机号
  • 逻辑冗余:LEFT JOIN后的条件判断可以更精准

正确的SQL查询

如果你的SQL方言支持IN搭配通配符,推荐使用更简洁的写法:

SELECT DISTINCT a.memid AS user_id, a.phone_number
FROM trxns a
LEFT JOIN tickets b ON a.memid = b.pid
WHERE 
  a.dateadded BETWEEN '2018-01-18' AND '2018-08-18'
  AND a.phone_number LIKE ANY ('233703%', '233706%', '233707%', '233704%')
  AND b.pid IS NULL;

若你的SQL环境不支持LIKE ANY,可改用OR连接多个条件:

SELECT DISTINCT a.memid AS user_id, a.phone_number
FROM trxns a
LEFT JOIN tickets b ON a.memid = b.pid
WHERE 
  a.dateadded BETWEEN '2018-01-18' AND '2018-08-18'
  AND (
    a.phone_number LIKE '233703%'
    OR a.phone_number LIKE '233706%'
    OR a.phone_number LIKE '233707%'
    OR a.phone_number LIKE '233704%'
  )
  AND b.pid IS NULL;

结果验证

执行上述查询后,会得到你预期的结果:

user_idphone_number
32337030299931

这是因为只有表A中用户3的记录满足所有条件:手机号前缀为233703,日期在指定范围内,且用户ID 3未出现在表B的pid列表中。

内容的提问来源于stack exchange,提问作者Adewale Shotobi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:30:12