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

选择同一表中不匹配的记录-SQL,sql,Sql,我要做的事情听起来很简单,但我想不出来。我有一个带有报告编号字段和报告类型字段的表。“报告编号”字段可以与“报告类型”字段具有相同的报告编号。我会提供一些数据来更好地解释我需要做什么 report_number report_type 1 A 2 A 2 B 1 A 3 A 3

我要做的事情听起来很简单,但我想不出来。我有一个带有报告编号字段和报告类型字段的表。“报告编号”字段可以与“报告类型”字段具有相同的报告编号。我会提供一些数据来更好地解释我需要做什么

report_number   report_type
1                   A
2                   A
2                   B
1                   A
3                   A
3                   A
3                   A
4                   C
4                   C
我需要查询='A'的报表,但不是与之关联的报表类型为B的报表编号。我想得到的结果是报告s1和3

报告编号可以有与之关联的不同报告类型

谢谢

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个解决方案,都采用了不同的方法。检查此项以查看哪一项适合您的RDBMS

编辑

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

尝试:

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这是我最喜欢的反半联接问题解决方案。+1这是我最喜欢的反半联接问题解决方案。改写:您需要A中出现的所有报表编号值,但B中不出现。是Griffin所说的,还是您希望所有报表编号都有报表类型A,但没有其他报表类型?不清楚4/C示例记录的意义是什么。改写:您需要所有出现在A中但不出现在B中的报表编号值。是Griffin说的,还是您希望所有报表编号都有报表类型A,而没有其他报表类型?不清楚4/C样本记录的意义是什么。@Diego您在用什么RDBMS测试它?这适用于SQL Server、MySQL、Postgresql和Oracle。看看这个@Diego你在用什么关系数据库测试这个?这适用于SQL Server、MySQL、Postgresql和Oracle。看到这个了吗