我有一个遗留数据库,我正在使用基本列布局:
SampleID
CompanyID
CompanyApplication
CompanyTest1
...
CompanyTest25
至少没有规范化,这会引起一些数据挖掘问题。
我需要获取CompanyIDs(Grouped By),其中CompanyApplication字段=“Registration”,但该公司没有为任何SampleID选择CompanyTest(n)字段。
问题是,有些CompanyID同时包含CompanyApplication和CompanyTest(n)记录(多行),但我想获得只有CompanyApplication of Registration的CompanyID。
数据有助于说明:
SampleID | CompanyID | CompanyApplication | CompanyTest1 | ... | CompanyTest25
------------------------------------------------------------------------
1 | 1 | Registration | | |
------------------------------------------------------------------------
2 | 1 | | True | |
------------------------------------------------------------------------
3 | 2 | Registration | | |
------------------------------------------------------------------------
4 | 2 | Registration | | |
------------------------------------------------------------------------
5 | 3 | | True | |
------------------------------------------------------------------------
6 | 3 | | | | True
我只想检索第3行和第4行,因为它们只有注册而没有其他测试。
答案 0 :(得分:1)
我们可以先选择您要排除的所有行,然后使用NOT EXISTS
跳过该查询中的CompanyID
。
SELECT DISTINCT ct1.company_id
FROM company_table AS ct1
WHERE ct1.CompanyApplication = "Registration"
AND NOT EXISTS(
SELECT 1
FROM company_table AS ct2
WHERE ct1.company_id = ct2.compnay_id
AND (ct2.CompanyTest1 IS NOT NULL
OR ct2.CompanyTest2 IS NOT NULL
...
OR ct2.CompanyTest25 IS NOT NULL)
)