SQL Eleminate Mulitple Value (ы), если тот же идентификатор имеет связанное значение NULL

StackOverflow https://stackoverflow.com/questions/3415959

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top