选择同一表中不匹配的记录-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。看到这个了吗