在这个简单的表格示例中:
ID SUBID
1000 NULL
1000 NULL
1000 1
1000 NULL
1001 NULL
1001 NULL
我希望查询仅返回一个ID 1001,因为所有1001 ID的SUBID中都为NULL。应该排除1000,因为至少有一个1000 ID在SUBID中也具有非NULL。
类似(将普通英语转换为SQL):
从表中选择唯一的ID,其中具有该ID的所有记录的子ID均为NULL
答案 0 :(得分:2)
您可以在没有null的子ID中使用
<TableCell className={classNames(classes.urlDealCell, classes.dealCell)}>
{this.getLogo(deal.CompanyWebsite)}
</TableCell>
答案 1 :(得分:1)
使用GROUP BY查询,并使用BIT_AND()聚合函数检查所有SUBID条目是否为NULL:
select ID
from myTable
group by ID
having bit_and(SUBID is null)
演示:https://www.db-fiddle.com/f/8dnfHV6VVVu7dvoZarTjdp/0
您还可以将
替换为HAVING子句having count(SUBID) = 0
因为COUNT()将忽略所有NULL条目。
演示:https://www.db-fiddle.com/f/t3FrL7zUAwGqqWDS4dQUg9/0
此版本适用于任何主要的RDBMS。
或
having max(SUBID) is null
这适用于大多数aggregate functions,因为如果所有条目均为NULL,则它们将返回NULL。 (COUNT()是一个例外。)
但是-如果在(ID, SUBID)
上有索引,则MAX()或MIN()可能是最快的。
答案 2 :(得分:1)
您可以使用NOT EXISTS
子句检查具有非NULL ID
值的subid
值,并将其从结果中排除:
SELECT DISTINCT m1.ID
FROM myTable m1
WHERE NOT EXISTS (SELECT *
FROM myTable m2
WHERE m2.ID = m1.ID AND m2.subID IS NOT NULL)
或者,您可以计算与ID
值关联的行,也可以计算与该NULL
关联的subid
ID
值的数量,并查看它们是否为一样:
SELECT ID
FROM myTable m1
GROUP BY ID
HAVING COUNT(*) = SUM(subid IS NULL)
输出:
1001