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

如何查询对应Answer字段全为NULL的重复URL记录?

需求分析与SQL修正方案

咱们先明确需求和现有问题:

  • 你有一张结构为 URL | Answer 的数据表,示例数据如下:
    • google | NULL
    • google | NULL
    • google | NULL
    • yahoo | Yes
    • hotmail | NULL
    • hotmail | No
  • 你的目标是:筛选出所有Answer字段全为NULL的URL(比如google),同时排除那些存在非NULL Answer值的URL(比如hotmail,因为它有一条Answer是No)

原SQL的问题

你写的这条SQL:

SELECT DISTINCT URL FROM Table WHERE URL IN ( SELECT URL FROM Table WHERE Answer IS NULL GROUP BY URL HAVING Count(*) >= 1 );

没法满足需求。它的逻辑是找出「存在至少一条Answer为NULL的URL」,但完全没排除那些同时有非NULL Answer的URL——比如hotmail会被错误地选出来,因为它确实有两条Answer为NULL的记录,但它不符合“全部Answer都是NULL”的要求。

几种正确的写法

这里给你推荐几种简洁且准确的实现方式:

方式1:用NOT EXISTS(逻辑最直观)

SELECT DISTINCT URL
FROM YourTable t1
WHERE NOT EXISTS (
    SELECT 1
    FROM YourTable t2
    WHERE t2.URL = t1.URL
    AND t2.Answer IS NOT NULL
);

逻辑解释:找所有URL,不存在任何一条该URL对应的Answer非空的记录,完全匹配你的需求。

方式2:用GROUP BY + HAVING(最简洁)

SELECT URL
FROM YourTable
GROUP BY URL
HAVING COUNT(Answer) = 0;

小技巧:COUNT(Answer)只会统计非NULL的Answer数量,当这个值为0时,说明该URL的所有Answer都是NULL,完美命中要求。

方式3:用LEFT JOIN(另一种逻辑思路)

SELECT DISTINCT t1.URL
FROM YourTable t1
LEFT JOIN YourTable t2
    ON t1.URL = t2.URL
    AND t2.Answer IS NOT NULL
WHERE t2.URL IS NULL;

逻辑解释:把原表和包含非NULL Answer的记录左连接,最后只保留那些没有匹配到的URL,也就是没有非NULL Answer的URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:56:44