Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL检索条件唯一且真实的记录,即不存在其他记录_Mysql_Subquery_Criteria_Unique - Fatal编程技术网

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个其他表)需要花费相当多的时间。谢谢你的密码。我总是忘记存在