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

如何编写SQL查询以包含完全未出现在matches表中的用户?

解决方案

你的问题出在INNER JOIN上——它只会保留同时存在于profile和matches表中的用户,自然漏掉了从未有过匹配记录的人。另外注意你的SQL里有个拼写错误:profiel.usernumber应该是profile.usernumber。

这里给你两种可行的修改方案:

方案一:LEFT JOIN + 条件过滤

把INNER JOIN改成LEFT JOIN,通过判断匹配记录是否为空来包含从未匹配过的用户,同时保留未与你匹配的已有用户:

SELECT age, hobbies, country
FROM profile
LEFT JOIN matches ON profile.usernumber = matches.user1
WHERE age BETWEEN ? AND ?
  AND profile.usernumber != ?
  AND (
    matches.user1 IS NULL  -- 从未有过匹配记录的用户
    OR profile.usernumber NOT IN (SELECT user2 FROM matches WHERE matches.user1 = ?)
  )

方案二:直接从profile筛选(更简洁)

直接从profile表中提取数据,排除你自己、年龄不符合的用户,再排除所有和你有过匹配记录的用户(不管你是匹配发起方还是接收方):

SELECT age, hobbies, country
FROM profile
WHERE age BETWEEN ? AND ?
  AND usernumber != ?
  AND usernumber NOT IN (
    -- 你发起匹配的对象
    SELECT user2 FROM matches WHERE user1 = ?
    UNION
    -- 发起匹配你的对象
    SELECT user1 FROM matches WHERE user2 = ?
  )

方案二更推荐,逻辑清晰且不会因用户有多个匹配记录而返回重复行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:20:33