SQL eleminate множественные значения, если один и тот же идентификатор имеет ассоциированное значение NULL - PullRequest
1 голос
/ 05 августа 2010

Хорошо, вот так:

У меня есть таблица с идентификатором (может быть дубликатом, но не NULL) и значением (может быть дубликатом и NULL)

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

Так как мне вернутьидентификаторы и значения всех записей, которые имеют значение, но если также найдено нулевое значение, не включайте его в набор результатов.

Таким образом, возвращаемое значение будет

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

поскольку идентификаторы 1 и 3 имеют значение (ноль) в одном или нескольких результатах

Ответы [ 2 ]

2 голосов
/ 05 августа 2010

Это типичный запрос типа «выбрать, где не существует» со многими способами для написания ответа, например:

Использование 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

Использование NOT IN:

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

Использование NOT EXISTS:

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
)
1 голос
/ 05 августа 2010
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
...