2016-09-15 102 views
1

我有兩個表,我試圖加入。如何離開在兩列上連接兩個MySQL表?

表1:T1

|id|date|hits| 
--- ----- ------ 
A1 01 2 
A1 02 2 
A2 02 3 

表2:T2

|id|date|runs| 
--- ----- ------ 
A1 01 1 
A2 02 0 
A3 02 2 

輸出:

|id|date|hits|runs| 
--- ----- --- --- 
A1 01 2 1 
A1 02 2 0 
A2 02 3 0 

每個ID具有多個日期並且有不同的命中/每日期運行。

我曾嘗試:

SELECT t1.*,t2.* 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON (t1.id=t2.id) AND (t1.date=t2.date); 

這給了我一個巨大的表。比T1更多的行。

T2中有比T1更多的行,但我只關心T1中的日期,因此LEFT JOIN。

回答

0

很難理解你想要做什麼而沒有看到數據樣本和你期望輸出的內容,但是我猜測你對LEFT JOIN的作用沒有正確的理解。

T1 LEFT JOIN T2不是將行數限制爲T1的每行一個。

如果T2中有多個行匹配T1中的給定行,則連接的結果將包含T2的所有匹配行。

什麼T1 LEFT JOIN T2確實是從T1輸出給定的行,即使在T2中有沒有行匹配。

我猜你可能想要這樣的東西:輸出從T1的每一行,加入到最新的與T2匹配的行。如果是這樣,Stack Overflow上已經發布了很多解決方案。尋找標籤爲的問題。


回覆您的評論:

謝謝,您所提供的測試數據測試您的查詢。它不會給你顯示的結果。其結果是:

SELECT t1.*,t2.* 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON (t1.id=t2.id) AND (t1.date=t2.date) 
ORDER BY t1.id, t1.date; 
+------+------+------+------+------+------+ 
| id | date | hits | id | date | runs | 
+------+------+------+------+------+------+ 
| A1 | 01 | 2 | A1 | 01 | 1 | 
| A1 | 02 | 2 | NULL | NULL | NULL | 
| A2 | 02 | 3 | A2 | 02 | 0 | 
+------+------+------+------+------+------+ 

演示:http://sqlfiddle.com/#!9/cece2/2

我認爲你正在從你上面貼有什麼不同的查詢。也許你在你的連接條件中混合了ANDOR

+0

嗨,有多個值行符合t1.id = t2.id但只有一個匹配t1.id = t2.id **和** t1.date = t2.date。我爲插圖添加了值註釋 – user3007270

+0

謝謝。我遇到的問題是我認爲只有一行滿足'(t1.id = t2.id)AND(t1.date = t2.date)'限制,但在回顧了我認識到的情況之後,情況並非如此。我很感激 – user3007270