MySQL检索条件唯一且真实的记录,即不存在其他记录
我有一个遗留数据库,我正在使用基本列布局:MySQL检索条件唯一且真实的记录,即不存在其他记录,mysql,subquery,criteria,unique,Mysql,Subquery,Criteria,Unique,我有一个遗留数据库,我正在使用基本列布局: SampleID CompanyID CompanyApplication CompanyTest1 ... CompanyTest25 至少没有规范化,这导致了一点数据挖掘问题 我需要获取CompanyApplication field=“Registration”中的companyID(分组依据),但该公司没有为任何样本ID选择任何CompanyTest(n)字段 问题是,有些companyID同时具有CompanyApplication和Com
SampleID
CompanyID
CompanyApplication
CompanyTest1
...
CompanyTest25
至少没有规范化,这导致了一点数据挖掘问题
我需要获取CompanyApplication field=“Registration”中的companyID(分组依据),但该公司没有为任何样本ID选择任何CompanyTest(n)字段
问题是,有些companyID同时具有CompanyApplication和CompanyTest(n)记录(多行),但我希望获得只具有CompanyApplication注册的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行,因为它们只有注册,没有其他测试。我们可以先选择您试图排除的所有行,然后使用
不存在
跳过该查询中的公司ID
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)
)
我想我忘了提到我不想做ct2.CompanyTest1不为NULL或ct2.CompanyTest2不为NULL。。。或者ct2.CompanyTest25不是空的,因为这需要大量的输入,我想知道是否有更灵活的方法来实现它;作为一项规则,sql将不同的列视为完全不同的数据,这些数据不能简单地组合在一起,以便将它们作为一个集合使用。如果它们应该是一个集合,那么它们属于同一列;这是保留旧模式的缺点,而不是将其迁移到更接近其实际含义的表示形式。相信我,我想修复此模式,但现在需要提取数据,重写此模式(以及此数据库中涉及的64个其他表)需要花费相当多的时间。谢谢你的密码。我总是忘记存在