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

MySQL查询:找出去年存在但今年未注册的用户

问题排查与正确SQL写法

原SQL的错误点

  • 字段引用错误:原表无Year字段,年份存储在MemberID中,不能直接调用A1.Year/B1.Year。
  • 语法错误:LIKE =是无效语法,需去掉等号,直接用LIKE。
  • 逻辑错误:
    • INNER JOIN会筛选双向匹配的记录,无法排除2024年有记录的用户。
    • B1.Name NOT LIKE "%/2024"会匹配用户其他年份的记录,导致错误关联,无法精准筛选目标用户。
  • 用户标识错误:原表ID是记录ID,不是用户唯一标识,应通过Name关联同一用户的不同年份记录。

正确SQL写法

方法一:使用NOT EXISTS子查询

SELECT DISTINCT u.Name
FROM `users` u
WHERE u.MemberID LIKE '%/2023'
AND NOT EXISTS (
    SELECT 1
    FROM `users` u2
    WHERE u2.Name = u.Name
    AND u2.MemberID LIKE '%/2024'
)

方法二:使用LEFT JOIN + IS NULL

SELECT DISTINCT u2023.Name
FROM `users` u2023
LEFT JOIN `users` u2024 
    ON u2023.Name = u2024.Name
    AND u2024.MemberID LIKE '%/2024'
WHERE u2023.MemberID LIKE '%/2023'
AND u2024.ID IS NULL

说明

  • DISTINCT用于去重,适配“用户每年对应多条记录”的场景。
  • 通过Name关联同一用户的不同年份记录,确保检查的是同一个用户在2024年的注册情况。
  • 两种写法核心逻辑一致:筛选出2023年有记录,且2024年无任何记录的用户,最终结果仅为Dave。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:24:52