MySQL检索记录,其中标准是唯一的和真实的,即不存在其他记录

时间:2011-07-05 21:05:49

标签: mysql subquery criteria unique

我有一个遗留数据库,我正在使用基本列布局:

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行,因为它们只有注册而没有其他测试。

1 个答案:

答案 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)
        )