В SQL мы можем использовать «Союз» для объединения двух таблиц. Какие есть разные способы сделать «Пересечение»? - PullRequest
2 голосов
/ 25 апреля 2010

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

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

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

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

другое решение кажется

select * from t1 INTERSECT select * from t2

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

Ответы [ 2 ]

2 голосов
/ 25 апреля 2010

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

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

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

0 голосов
/ 25 апреля 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
...
...