2010-04-24 25 views
2

在SQL中,有一個運算符來「聯合」兩個表。在一次採訪中,我被告知,如果一張桌子上只有1個場,裏面有1,2,7,8個,而另一個桌子上只有1個場,其中有2個,7個,我怎樣才能得到這個交叉點。起初我很震驚,因爲我從來沒有這樣看過。在SQL中,我們可以使用「聯合」來合併兩個表。 「交集」有什麼不同的方法?

後來,我發現,它實際上是一個「加入」是(內部連接),這僅僅是

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

(雖然「加盟」這個名字給人的感覺更像「聯盟」而非「相交」 )

另一種解決方案似乎是

select * from t1 INTERSECT select * from t2 

,但它不是在MySQL的支持。除了這兩種方法之外,還有不同的方法來獲得交叉點嗎?

回答

2

這個page解釋瞭如何在MySQL中實現INTERSECT和MINUS。要實現INTERSECT你應該使用一個內部聯接:

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

您的代碼確實這也,但不建議寫加入這樣了。

0

交叉只是一個內部聯接。所以

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 
... 
相關問題