В SQL мы можем использовать Union для объединения двух таблиц. Какие существуют способы сделать пересечение?

В SQL есть оператор для «объединения» двух таблиц. В интервью мне сказали, что, скажем, в одной таблице есть только 1 поле с 1, 2, 7, 8, а в другой таблице также есть только 1 поле с 2 и 7, как мне получить пересечение. Сначала я был ошеломлен, потому что никогда не видел его таким.

Позже я обнаружил, что на самом деле это «Join» (внутреннее соединение), которое просто

select * from t1, t2 where t1.number = t2.number

(хотя название «присоединиться» больше похоже на «объединение», чем на «пересечение»)

похоже другое решение

select * from t1 INTERSECT select * from t2

но он не поддерживается в MySQL. Существуют ли другие способы получить пересечение, кроме этих двух методов?


person nonopolarity    schedule 24.04.2010    source источник


Ответы (2)


На этой странице объясняется, как реализовать INTERSECT и MINUS в MySQL. Чтобы реализовать INTERSECT, вы должны использовать внутреннее соединение:

SELECT t1.number
FROM t1
INNER JOIN t2
ON t1.number = t2.number

Ваш код тоже делает это, но больше не рекомендуется писать такие соединения.

person Mark Byers    schedule 24.04.2010

Пересечение - это просто внутреннее соединение. Так

select * from t1 INTERSECT select * from t2

можно переписать для MySQL, например

select * 
from t1 
inner join t2
on t1.col1 = t2.col1
and t1.col2 = t2.col2
and t1.col3 = t2.col3
...
person Andomar    schedule 24.04.2010