1

好的,这里是:

我有一个带有 id 的表(可以重复但不能为 NULL )和值(可以是重复的和 NULL )

id      value
-----   -----
1       red
1       red
1       (null)
2       blue
2       blue
3       (null)

那么如何返回所有具有值的记录的 id 和值,但如果还找到空值,则不要将其包含在结果集中。

所以回报是

id      value
-----   -----
2       blue

因为 id 1 和 3 在一个或多个结果中的值为 (null)

4

2 回答 2

2

这是一个典型的“选择不存在的地方”类型的查询,有多种编写答案的方法,例如:

使用 LEFT JOIN / WHERE ... IS NULL:

SELECT DISTINCT T1.id, T1.value
FROM your_table T1
LEFT JOIN your_table T2
ON T1.id = T2.id AND T2.value IS NULL
WHERE T2.id IS NULL

使用不在:

SELECT DISTINCT id, value
FROM your_table
WHERE id NOT IN
(
    SELECT DISTINCT id
    FROM your_table
    WHERE value IS NULL
)

使用不存在:

SELECT DISTINCT id, value
FROM your_table
WHERE NOT EXISTS
(
    SELECT NULL
    FROM your_table T1
    WHERE your_table.id = T1.id AND T1.value IS NULL
)
于 2010-08-05T14:54:21.100 回答
1
select t1.id, t1.value
from MyTable t1
left outer join MyTable t2 on t1.id = t2.id and t2.value is null
where t2.id is null
group by t1.id, t1.value
于 2010-08-05T14:55:15.827 回答