Как получить только значения в одной таблице, которые находятся во второй таблице (table1.a находится в table2.a и т. Д.)? - PullRequest
2 голосов
/ 10 мая 2019

Это моя обычная таблица:

    A | B | C   (table1)
----------------
    1 | 2 | 3
    2 | 3 | 4
    3 | 4 | 5
    4 | 5 | 6
    7 | 8 | 9

Я хочу использовать эту таблицу, чтобы отфильтровать ее, возможно, используя объединения и т. Д.

    A | B | C  (table2)
----------------
    1 |   |  
    3 |   |  
      | 4 | 
      | 5 | 
      |   | 5
      |   | 9

, чтобы мой результат былследующее:

    A | B | C
----------------
    3 | 4 | 5

Моя идея состояла бы в том, чтобы объединить каждый столбец в таблице2, как показано ниже, чтобы, если столбец таблицы 2 не был нулевым, то объединялось, в противном случае не объединялось:

SELECT
t1.* 
FROM table1 
JOIN table2 
ON ( t1.A = t2.A OR t2.A IS NULL)
AND ( t1.B = t2.B OR t2.B IS NULL)
AND ( t1.C = t2.C OR t2.C IS NULL)

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 10 мая 2019

Это то, что вы хотите?

select t1.*
from table1 t1
where exists (select 1 from table2 t2 where t2.a = t1.a) and
      exists (select 1 from table2 t2 where t2.b = t1.b) and
      exists (select 1 from table2 t2 where t2.c = t1.c);

Это проверяет наличие каждого столбца в table2, возвращая только те строки, где присутствуют все три столбца.

0 голосов
/ 10 мая 2019

Этот медленнее, но я считаю, что он читается лучше ...

SELECT t.* 
FROM #table1 t
JOIN #table2 a
    ON a.A = t.A
JOIN #table2 b
    ON b.B = t.B
JOIN #table2 c
    ON c.C = t.C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...