我有2个表,表名是case
和party
。两个表都有case_id
。他们有1对多的关系(1个案件有几个党派)。对于每种情况,必须至少将一方标记为主要方(方表中的是/否字段)。我需要找到案件中没有派对的情况。
到目前为止,我有这个查询,但它只会拉动每个案件中不是主要派对的各方 - 但我需要它才能找到没有指定主要派对的案件。 (我对案件类型也有约束)。我正在使用SQL Server 2008R2。在此先感谢您的帮助!
select
[case].case_id, [case].case_number, count(party.case_id)as party_count
from
party
join
[case] on [case].case_id = party.case_id
where
[case].case_type_id IN(12,13,15)
and party.primary_party = ''
group by
[case].case_id, [case].case_number
答案 0 :(得分:0)
试试这个:
select *
from case C
left join P on P.case_id = C.case_id and P.primary_party != ''
where P.case_id is null
这将选择所有没有关联的非空主要聚会的案例。
作为旁注,我建议使用null
来表示“没有主要派对”而不是空字符串。
答案 1 :(得分:0)
虽然您的代码有点混乱,但必须说(使用SQL保留字作为表或字段名称,或者我必须说的任何其他对象,即使您将它们放在括号上也不是一个好主意)
但是你需要一个正确的外部联接。
它应该是这样的:
SELECT
C.case_id,
C.case_number,
COUNT(P.case_id) AS party_count
FROM
party P
RIGHT OUTER JOIN [case] C ON
C.case_id = p.case_id AND
C.case_type_id IN (12, 13, 15)
WHERE
P.primary_party = '' AND
P.case_id IS NULL
GROUP BY
C.case_id,
C.case_number