如何用SQL查询未接受C1合同的人员列表?
查询未接受C1合同的人员SQL语句
针对需求,这里提供几种可行的SQL写法:
方法1:NOT EXISTS子查询
直接判断人员在ADDITIONAL_INFO表中无C1类型合同记录,逻辑直观:
SELECT p.person_id FROM PERSON p WHERE NOT EXISTS ( SELECT 1 FROM ADDITIONAL_INFO ai WHERE ai.person_id = p.person_id AND ai.contract_name LIKE 'C1%' -- 若C1合同名称是固定值,可替换为`ai.contract_name = 'C1-XXX'` );
方法2:LEFT JOIN + IS NULL
通过左连接PERSON表与仅含C1合同的ADDITIONAL_INFO子集,筛选无匹配的人员:
SELECT p.person_id FROM PERSON p LEFT JOIN ADDITIONAL_INFO ai ON p.person_id = ai.person_id AND ai.contract_name LIKE 'C1%' WHERE ai.person_id IS NULL;
方法3:EXCEPT集合运算
用所有人员ID减去已接受C1合同的人员ID,得到目标列表:
SELECT person_id FROM PERSON EXCEPT SELECT person_id FROM ADDITIONAL_INFO WHERE contract_name LIKE 'C1%';
注意:代码中的
contract_name LIKE 'C1%'需根据实际合同名称格式调整,确保精准匹配C1类合同。
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

