@glow - конечно, смотрите обновленный ответ

м, у меня есть запрос вроде этого:

SELECT *
FROM TABLE

И это возвращает это:

TABLE
ID | DATA | VAL
===============
01 | ABCD | 1
01 | DEFG | 2
02 | FGHI | 3
02 | HIJK | 2
03 | JKLM | 3
03 | LMNO | 4
04 | NOPQ | 0
04 | PQRS | 1

В настоящее время у меня есть запрос, который пытается найти только хорошие значения, подобные этому, но он некорректен, потому что включены идентификаторы с плохими VAL в других строках, а это не то, что я хотел бы.

SELECT *
FROM TABLE
WHERE TABLE.VAL IN ("1","2","3")

вернет это (при отсутствии LMNO и PQRS):

TABLE
ID | DATA | VAL
===============
01 | ABCD | 1
01 | DEFG | 2
02 | FGHI | 3
02 | HIJK | 2
03 | JKLM | 3
04 | NOPQ | 0

Тем не менее, я хочу только строки, где идентификатор не имеет плохих значений. Итак, 01 и 02 в порядке, потому что все их строки имеют хорошие результаты. 03 и 04 плохие, потому что они испорчены плохими результатами в других строках.

Я мог бы просто привести такой результат и обработать его таким образом в программном обеспечении, но кажется, что это должно быть возможно с базой данных, и, как правило, делать это в базе данных лучше, чем в программном обеспечении (вы знаете, вот для чего они там ...)

Лучшее, что я мог придумать, это:

SELECT *
FROM TABLE
WHERE COUNT( SELECT ID
             FROM TABLE
             WHERE TABLE.VAL NOT IN ("1","2","3")
           ) = 0

Это жизнеспособно? Есть ли лучшая альтернатива?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос