Заменить оператор «минус» на «отсутствует» или «не существует» — Oracle

#oracle #operator-keyword #not-exists #notin

#Oracle #оператор-ключевое слово #не существует #notin

Вопрос:

У меня есть запрос, который я хочу заменить. Я не хочу использовать оператор «минус».

 SELECT t1_col1, t1_col2 
FROM t1 
WHERE (t1_col1, t1_col3) 
IN (SELECT t2_col1, t2_col2 
    FROM t2 
    WHERE t2_col3 = '123456' 
    MINUS (SELECT t3_col1, t3_col2 
            FROM t3 
            WHERE t3_col4 = '123456' 
            UNION SELECT t3_col3, t3_col2 
                  FROM t3 WHERE t3_col4 = '123456'));
  

Любая помощь будет оценена. Спасибо!

Комментарии:

1. Почему? В чем проблема с MINUS?

2. Вы пробовали «НЕ СУЩЕСТВУЕТ»?

3. Он не поддерживается фреймворком, который я пытаюсь использовать. Я пробовал это, но он не отображает результаты, которые я ожидаю, я просто заменил МИНУС на И НЕ СУЩЕСТВУЕТ. Я не знаю, нужно ли мне обновлять что-то еще.

Ответ №1:

 SELECT t1_col1, t1_col2 
FROM t1 
WHERE (t1_col1, t1_col3) 
IN 
(
    SELECT t2_col1, t2_col2 
    FROM t2 , (
                SELECT t3_col1 as C1, t3_col2 AS C2
                FROM t3 
                WHERE t3_col4 = '123456' 
                UNION 
                SELECT t3_col3, t3_col2 
                FROM t3 
                WHERE t3_col4 = '123456'
               ) x
    WHERE t2_col3 = '123456' 
    and   t2_col1 = X.C1 ( ) 
    and   t2_col2 = x.c2 ( )
    and   X.C1 is  null
    and   x.c2 is  null 
)