在同一个表中选择不匹配的记录 - SQL

时间:2012-03-09 17:20:32

标签: sql

我想要做的事情听起来很简单,但无法弄明白。我有一个包含report_number字段和report_type字段的表。 report_number字段可以包含相同的“报告编号”以及report_type字段。我将提供一些数据来更好地解释我需要做什么。

report_number   report_type
1                   A
2                   A
2                   B
1                   A
3                   A
3                   A
3                   A
4                   C
4                   C

我需要查询='A'的报告,但不要查询同样具有与之关联的报告类型B的SAME报告编号。我想得到的结果是报告#1和3。

报告编号可以包含与之关联的不同report_types。

谢谢!

2 个答案:

答案 0 :(得分:4)

尝试:

select distinct(report_number)
from reports 
where report_type='A' and report_number not in (select report_number from reports where report_type='B')

答案 1 :(得分:0)

SELECT  DISTINCT a.Report_Number
FROM    YourTable a
        LEFT JOIN YourTable b
            ON a.Report_Number = b.Report_Number
                    AND a.Report_Type <> b.Report_Number
                    -- OPTIONAL
                   AND b.Report_Type = 'B'
WHERE   b.Report_Type IS NULL
-- OPTIONAL
AND a.Report_Type = 'A'

修改

到目前为止,已发布了3种采用不同方法的解决方案。检查此Link以查看哪个适合您的RDBMS。