@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
Это жизнеспособно? Есть ли лучшая альтернатива?
Спасибо!