Sql - есть большой запрос, который необходимо отфильтровать дубликаты

user2924127 спросил: 14 ноября 2017 в 06:16 в: sql

У меня есть массивный запрос, который объединяет около 70 таблиц и возвращает более 200 столбцов:

SELECT TABLEA.ID, TABLEB.ID, TABLEC.ID  ...
FROM TABLEA LEFT JOIN TABLEB ON TABLEA.ID = TABLE.FID LEFT JOIN TABLEC ON TABLEB.ID = TABLEC.FID ...
WHERE [some conditions]

У этого результата есть один уникальный первичный столбец, который он должен вернуть, - TABLEA.ID. Все значения в столбце должны быть уникальными, но из-за неправильного сбора данных есть некоторые дубликаты. Так что у меня есть некоторые идентификаторы, которые являются дубликатами, и у них есть другие столбцы с различными значениями. Из этих дубликатов я знаю, какие конкретные строки мне нужно захватить, а какие дубликаты я могу удалить (например, захватить строку, где TABLEA.ID = 9999 и TABLEZ.SOMECOLUMN = 'JOHN DOE').

Так что Окончательный набор результатов выглядит примерно так:

TABLEA.ID | TABLEB.ID | TABLEZ.SOMECOLUMN .....
     1         fjash       BOB
     2         dfd         BOB
     3         34g         JOHN
     3         vfg         KIM
     3         vsd         OBI-WAN
     4         vgsdfg      NICK
     4         fg          HA
     5         hggh        HAHA

Из этого я знаю, какой дубликат мне нужно отфильтровать, чтобы получить что-то вроде этого:

TABLEA.ID | TABLEB.ID | TABLEZ.SOMECOLUMN .....
     1         fjash       BOB
     2         dfd         BOB
     3         34g         JOHN
     4         vgsdfg      NICK
     5         hggh        HAHA

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

 SELECT TABLEA.ID, TABLEB.ID, TABLEC.ID  ...
    FROM TABLEA LEFT JOIN TABLEB ON TABLEA.ID = TABLE.FID LEFT JOIN TABLEC ON TABLEB.ID = TABLEC.FID ...
    WHERE [some conditions]
    AND (TABLEA.ID = 9999 AND TABLEZ.SOMECOLUMN = 'JOHN DOE')

Но это только возвращает один ряд вместо. Я попробовал другую комбинацию, пытаясь отрицать ее:

AND (TABLEA.ID = 9999 AND TABLEZ.SOMECOLUMN <> 'OTHER VALUE OTHER THAN JOE DOE')

Но это также не работает.

0 ответов