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

多对多关系中查询指定客户未下单订单的SQL问题

解决指定客户未下单的Links记录查询问题

你的需求是找出指定客户没有下单的所有links记录,原SQL语句的逻辑存在问题,导致无法得到预期结果,下面我来帮你修正并解释原因。

原SQL的问题分析

你原来的语句:

SELECT links.id, links.linkname FROM links LEFT JOIN records ON records.linkid = links.id WHERE records.linkid IS NULL AND records.clientid != 1

这里有两个关键错误:

  1. 当使用LEFT JOIN时,没有匹配的records行的所有字段都会是NULL,records.clientid != 1这个条件会把这些NULL的行直接排除,根本无法找到未关联的记录。
  2. 没有明确限定要查询的目标客户,逻辑上是在找所有客户都没下单的links,而不是指定客户没下单的links。

正确的查询方法

这里提供两种高效且易懂的写法,你可以根据习惯选择:

方法1:使用NOT EXISTS(推荐)

这种方式逻辑最直观,检查当前link是否不存在于指定客户的下单记录中:

SELECT l.id, l.linkname
FROM links l
WHERE NOT EXISTS (
    SELECT 1
    FROM records r
    WHERE r.linkid = l.id
      AND r.clientid = 2 -- 替换为你要查询的clientid,比如1、10等
);

方法2:使用LEFT JOIN并过滤空值

将客户条件放在JOIN子句中,只关联指定客户的下单记录,再过滤掉有匹配的行:

SELECT l.id, l.linkname
FROM links l
LEFT JOIN records r 
  ON r.linkid = l.id 
  AND r.clientid = 2 -- 替换为目标clientid
WHERE r.id IS NULL;

验证示例结果

针对你提供的测试数据,当查询clientid=2(Sue)时,两个语句都会返回:

idlinkname
1ice cream
3pasta

完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:32:45