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

如何统计无记录ID的项目数量?SQL查询求助

解决方法:找出无记录ID的项目

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

  • 使用**内连接(JOIN)会自动过滤掉没有关联FIELD记录的项目,需要换成左连接(LEFT JOIN)**才能保留所有项目
  • 字段名PROJECT-HAS-RECORD包含横杠,SQL会将其解析为减法运算,必须用对应数据库的标识符包裹:MySQL用反引号,SQL Server用方括号[],PostgreSQL用双引号"`
  • COUNT(DISTINCT PROJECT.PROJECTID)无实际意义,因为已经按PROJECTID分组,每个分组的ID本身就是唯一的

方案1:统计每个项目的无记录字段数(含无关联字段的项目)

如果需要得到每个项目中PROJECT-HAS-RECORD≠1的字段数量,同时包含没有关联任何字段的项目(这类项目计数为0),可以使用以下查询:

MySQL 写法

SELECT 
    p.PROJECTID,
    COUNT(f.PROJECTID) AS no_record_count
FROM PROJECT p
LEFT JOIN FIELD f
    ON p.PROJECTID = f.PROJECTID
    AND f.`PROJECT-HAS-RECORD` != 1
GROUP BY p.PROJECTID;

SQL Server 写法

SELECT 
    p.PROJECTID,
    COUNT(f.PROJECTID) AS no_record_count
FROM PROJECT p
LEFT JOIN FIELD f
    ON p.PROJECTID = f.PROJECTID
    AND f.[PROJECT-HAS-RECORD] != 1
GROUP BY p.PROJECTID;

PostgreSQL 写法

SELECT 
    p.PROJECTID,
    COUNT(f.PROJECTID) AS no_record_count
FROM PROJECT p
LEFT JOIN FIELD f
    ON p.PROJECTID = f.PROJECTID
    AND f."PROJECT-HAS-RECORD" != 1
GROUP BY p.PROJECTID;

方案2:仅筛选完全无有效记录的项目

如果你的核心需求是找出所有关联字段都无记录,或根本没有关联任何字段的项目,下面的查询更高效直接:

MySQL 写法

SELECT p.PROJECTID
FROM PROJECT p
WHERE NOT EXISTS (
    SELECT 1 
    FROM FIELD f 
    WHERE f.PROJECTID = p.PROJECTID 
    AND f.`PROJECT-HAS-RECORD` = 1
);

SQL Server 写法

SELECT p.PROJECTID
FROM PROJECT p
WHERE NOT EXISTS (
    SELECT 1 
    FROM FIELD f 
    WHERE f.PROJECTID = p.PROJECTID 
    AND f.[PROJECT-HAS-RECORD] = 1
);

PostgreSQL 写法

SELECT p.PROJECTID
FROM PROJECT p
WHERE NOT EXISTS (
    SELECT 1 
    FROM FIELD f 
    WHERE f.PROJECTID = p.PROJECTID 
    AND f."PROJECT-HAS-RECORD" = 1
);

这个查询直接检查每个项目是否不存在PROJECT-HAS-RECORD=1的关联字段,完全匹配你“找出所有没有记录ID的项目”的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:26:27