SQL Eleminate Mulitple Value (ы), если тот же идентификатор имеет связанное значение NULL
-
26-09-2019 - |
Вопрос
Хорошо, здесь идет:
У меня есть таблица с идентификатором (можно дублировать, но не ноль) и значение (можно дублировать и нуль)
id value
----- -----
1 red
1 red
1 (null)
2 blue
2 blue
3 (null)
Итак, как я могу вернуть идентификатор и ценность всех записей, которые имеют значение, но если нулевое значение также найдено, не включите его в набор результатов.
Так что возвращение будет
id value
----- -----
2 blue
как ID 1 и 3 имеют значение (NULL) в одном или нескольких результатах
Решение
Это типичный «SELECT, где не существует» -type запрос со многими способами написать ответ, например:
Использование левого присоединения / где ... это ноль:
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
)
Другие советы
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
Не связан с StackOverflow