Как выбрать строки, которых нет в другой таблице с 2 столбцами сравнения? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть следующие таблицы:

T1                    T2                Desired result
    CA   CB             CA    CC               CA   CB
     1    2              1     3                1    4
     1    4              1     2                2    1
     1    3              1     5                2    3 
     2    1              2     4
     2    3
     3    6
     3    1
     4    ...

Мне нужно сделать соединение между T1 и T2 (используя столбец CA) и вернуть только те строки, значения которых в CB не существуют в T2.CC

Простой способ добиться этого - использовать следующий запрос:

    SELECT T1.* FROM T1 INNER JOIN T2 ON t1.CA = t2.CA AND 
    t1.CB NOT IN (SELECT CC FROM T2 WHERE T2.CA = T1.CA)

Я думаю, что предыдущий запрос не очень эффективен.По этой причине я ищу что-то лучшее

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Как правило, более эффективным средством достижения такого рода результатов является поиск записей, которые терпят неудачу - более простое условие соединения.Их можно найти, выполнив внешнее объединение и проверив значение null следующим образом:

select t1.ca, t1.cb
from t1 left outer join t2 on t1.ca=t2.ca and t1.cb=t2.cc
where t2.ca is null;
0 голосов
/ 02 июня 2018

Я думаю, вы просто хотите not exists:

select t1.*
from t1
where not exists (select 1
                  from t2
                  where t2.ca = t1.ca and t2.cb = t1.cb
                 );

Для производительности вам нужен индекс на t2(ca, cb).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...