2009-10-14 117 views
1

我想將兩個表連接在一起,並且只有表1中的數據(但是每個記錄)中的數據並且如果適用的話從另一個表中的列添加數據(如果適用的話)不會有任何記錄匹配)試圖通過SQL「添加」一列到表JOIN

我試着用一個左連接匹配四列,但我得到了一些記錄的雙打。如果表1中有1050條記​​錄,我希望返回1050條記​​錄,但我得到的不止於此。

問題的一部分是沒有任何索引列,因爲每列的值都在整個列中重複。

不管怎麼說,這是SQL語句我試過,但我得到了四個額外的記錄(重複)

SELECT t1.*, t2.assignedtechnician 
FROM idlereport AS t1 
LEFT JOIN wipassignedtechnician AS t2 
ON (LEFT(t1.rma, 6)=LEFT(t2.rma, 6) 
AND t1.receiveddate=t2.receiveddate 
AND t1.serial=t2.serial 
AND t1.partnumber=t2.partnumber) 

附:我正在使用MySQL

回答

2

問題更多的行爲,有時有在T2多個記錄匹配基礎上加入您指定的條件在T1一條記錄。 ..

SELECT t1.*, Min(t2.assignedtechnician) 
FROM idlereport AS t1 
    LEFT JOIN wipassignedtechnician AS t2 
     ON (LEFT(t1.rma, 6)=LEFT(t2.rma, 6) 
      AND t1.receiveddate=t2.receiveddate 
      AND t1.serial=t2.serial 
      AND t1.partnumber=t2.partnumber) 
Group By t1.* 

SELECT t1.*, 
    (Select Min(t2.assignedtechnician) 
    From wipassignedtechnician 
    Where LEFT(rma, 6)=LEFT(t1.rma, 6) 
      AND receiveddate=t1.receiveddate 
      AND serial=t1.serial 
      AND partnumber=t1.partnumber) assignedtechnician 
FROM idlereport AS t1 
+0

第一個只返回一行?但第二個是有效的,我沒有想到子查詢,仍然是新的。 謝謝 – Geoff 2009-10-14 15:00:04

0

左連接是在這種情況下正確的連接,我想你的問題是你的一部分。爲什麼你加入字符串列而不是某些索引?

但你永遠不應該得到比在你的左表(idlereport)

+0

您可以輕鬆地獲得更多的行,如果一個'idlereport'在'wipassignedtechnician'(不止一個匹配項,多名技術人員每份報告)。 – 2009-10-14 14:49:45

+0

哦。是。你是對的,我想得太快 – knittl 2009-10-14 14:51:52

+0

當我開始瞭解數據庫時,我並沒有真正意識到索引表的重要性,並且因爲沒有列具有所有獨特值,所以我沒有創建一個。每列中有重複的值,但沒有記錄本身實際上是重複的。我不確定使用數字索引會有什麼幫助,但這是我的下一步,如果這個問題是「無法回答的」 – Geoff 2009-10-14 15:04:48

相關問題