大家早上好,
我正在尝试确定父母合同中没有任何具有“待定”状态的子合同的合法合同类型。需要注意的一点是,父母合同除了待定之外可以有多个具有不同状态的子合同(例如,父母合同1可以有4个子合同,每个具有不同的状态,例如“活动”,“审核中”,“正在处理中”等等。)
select
pcon.parentcontractid,
count(ccon.childcontractid)
from
tblcontract pcon,
tblcontract ccon
where
ccon.parentcontractid = pcon.parentcontractid
and ccon.contract_type = 'CHILD CONTRACT'
and pcon.contract_status in ('Active','Pending')
and pcon.group = 'Legal'
and ccon.stat_cd = 'Pending'
group by pcon.parentcontractid;
^^有计数(ccon.childcontractid)= o导致没有结果,但是在数据库中有这种情况的例子,所以我在这里有问题。
提前致谢!
答案 0 :(得分:0)
因为您使用的是隐式INNER JOIN
,所以永远不会将0作为计数,因为这些记录不会包含在内。您要找的是LEFT OUTER JOIN
。这会保留“左”表中的所有行。
此查询应该可以解决问题:
SELECT pcon.parentcontractid, COUNT(ccon.childcontractid)
FROM tblcontract pcon
LEFT OUTER JOIN tblcontract ccon
ON ccon.parentcontractid = pcon.parentcontractid
AND ccon.contract_type = 'CHILD CONTRACT'
AND ccon.stat_cd = 'Pending'
WHERE pcon.contract_status IN ('Active','Pending')
AND pcon.group = 'Legal'
GROUP BY pcon.parentcontractid;
答案 1 :(得分:0)
除非我误读你的帖子,否则我认为你可以通过使用IN或EXISTS来简化这一点。 因为你无论如何都得到了所有的家长...
SELECT *
FROM tblcontract
WHERE parentcontractid NOT IN(SELECT c.parentcontractid
FROM tblcontract c
WHERE c.contract_type = 'CHILD CONTRACT'
and c.stat_cd = 'Pending')