Справка по SQL с пропуском записей - PullRequest
1 голос
/ 03 марта 2011

У меня есть запрос, который возвращает несколько записей, эти записи идут парами. Некоторая информация в столбцах пары записей одинакова, например, ex ID и год, но другая информация имеет другие значения, например, ex столбец с именем type может иметь значение null для одного и 'A' для другого.

Если этот третий тип столбца равен 'A' или другой произвольной строке для одной из пар, как мне добиться, чтобы она исключала обе записи с одинаковым идентификатором и годом в разделе WHERE запроса SQL? Я думал, что может быть использовано заявление случая, но я не уверен.

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Вы можете использовать NOT EXISTS и подзапрос ...

SELECT id, year
FROM table t
WHERE NOT EXISTS (SELECT * FROM table t2 
                  WHERE ThirdColumn = 'A'
                  AND t2.id = t.id
                  AND t2.year = t.year)
0 голосов
/ 03 марта 2011

Не все так просто.

select t.*
from tbl t
left join (
  select t2.id, t2.year
  from tbl t2
  group by t2.id, t2.year
  having count(*) > 1 and
      count(case when type='A' then 1 end) *
      count(case when type='A' then null else 1 end) > 0
) X
  on X.id = t.id and X.year = t.year
WHERE X.id is null
  • count(*) > 1 помогает нам определить, где находится хотя бы пара с таким же идентификатором / год
  • 2 count(case..) > 0 сопределить, что «хотя бы один из type s является 'A', а хотя бы один не является
  • LEFT JOIN + WHERE IS NULL - это классический метод, позволяющий отображать только те данные, для которых не удалось выполнить левое соединение, то есть идентификатор / годпары, удовлетворяющие условиям подзапроса, вывозятся
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...