У меня есть запрос, который является более сложным, чем приведенный здесь пример, но который должен возвращать только те строки, в которых определенное поле не появляется более одного раза в наборе данных.
ACTIVITY_SK STUDY_ACTIVITY_SK
100 200
101 201
102 200
100 203
Inв этом примере я не хочу, чтобы возвращались записи с ACTIVITY_SK
из 100, потому что ACTIVITY_SK
дважды появляется в наборе данных.
Данные являются таблицей сопоставления и используются во многих объединениях, нонесколько таких записей подразумевают проблемы с качеством данных, поэтому мне нужно просто удалить их из результатов, а не вызвать неудачное объединение в другом месте.
SELECT
A.ACTIVITY_SK,
A.STATUS,
B.STUDY_ACTIVITY_SK,
B.NAME,
B.PROJECT
FROM
ACTIVITY A,
PROJECT B
WHERE
A.ACTIVITY_SK = B.STUDY_ACTIVITY_SK
Я пробовал что-то вроде этого:
SELECT
A.ACTIVITY_SK,
A.STATUS,
B.STUDY_ACTIVITY_SK,
B.NAME,
B.PROJECT
FROM
ACTIVITY A,
PROJECT B
WHERE
A.ACTIVITY_SK = B.STUDY_ACTIVITY_SK
WHERE A.ACTIVITY_SK NOT IN
(
SELECT
A.ACTIVITY_SK,
COUNT(*)
FROM
ACTIVITY A,
PROJECT B
WHERE
A.ACTIVITY_SK = B.STUDY_ACTIVITY_SK
GROUP BY A.ACTIVITY_SK
HAVING COUNT(*) > 1
)
Но должен быть менее дорогой способ сделать это ...