2013-11-22 38 views
0

我對MySQL很新穎,而且我正在努力解決這個問題。我有兩個不同的表格(T1和T2),而T2則獲得了T1中的所有元素,還有一些額外的元素。在多個條件下在MySQL上連接兩個表

我試圖從T2獲取變量 「公司」 從T1的所有值,如:

SELECT 
T2.company as company, 
T1.route as route, 
T1.departure_time, 
T1.arrival_time 

當某些條件得到滿足,如:

T1.route LIKE(CONCAT(T2.airport1,T2.airport2)) AND 
T1.departure_time = T2.departure_time AND 
T1.arrival_time = T2.arrival_time 

如何我可以這樣做嗎?對於基本問題抱歉,但我現在真的很絕望。非常感謝。

OBS:是的,壞的是,這兩個表從不同的來源來了,因此,有加入其中沒有唯一的鍵值,所以這就是爲什麼我在與所有這些條件的掙扎......

+1

桌子上的鑰匙是什麼? –

回答

0

你試過這個嗎?

SELECT 
    T2.company as company, 
    T1.route as route, 
    T1.departure_time, 
    T1.arrival_time 
from 
    t1,t2 
where 
    T1.route LIKE(CONCAT(T2.airport1,T2.airport2)) AND 
    T1.departure_time = T2.departure_time AND 
    T1.arrival_time = T2.arrival_time 
+0

是的,我也試過,但它也花了很長時間,我收到服務器超時...兩個表是巨大的,每個8,5萬條目 – rodrigoburg

+0

似乎這個結構有點缺陷。你應該重新組織表格。添加適當的主鍵/外鍵和索引。 –

0

您可以在ON子句中添加條件,像這樣

SELECT Fields 
FROM T1 
LEFT JOIN T2 
ON T1.company=T2.company 
AND T1.route LIKE(CONCAT(T2.airport1,T1.airport2)) 
AND T1.departure_time = T2.departure_time 
AND T1.arrival_time = T2.arrival_time 

是,對於剛剛擔任的是確保該行確實在連接目的的條件,條件,以確定哪些要選擇的行將在WHERE子句之後。考慮下面的線路在其他線路之後立即走

WHERE T1.company='airFoo' 
+0

我實際上已經嘗試過使用LEFT JOIN,就像你所建議的那樣,但是我花了很長時間纔得到超時響應,所以我得出結論說我一定是做錯了什麼事情了...... – rodrigoburg

+0

你能發佈實際使用的查詢嗎?也一定要正確地索引使用的字段。如果你有大表,這可能會減慢查詢速度 –