2011-10-05 60 views
-1

我有一個MySQL查詢,根據表格與第三個表格的關係連接一個2個表格,但它似乎並不總是工作正常。查詢是:加入不直接相關的MySQL表格

SELECT a.ID, a.ECPCodeID, a.RegDate, a.BusName, b.ID as RepCodeID, b.RepCode 
FROM ECPs_Registration a, Reps_Codes b 
WHERE SUBSTR(a.ZipCode,1,5) 
IN (
    SELECT SUBSTR(c.Zip,1,5) 
    FROM Reps_Zip c 
    WHERE c.RepCodeID = b.ID 
) 
ORDER BY b.RepCode,a.BusName 

如果我拿出Rep_Codes表從主加盟,並把它放在Reps_Zip選擇,它的工作原理,但我沒有得到來自Reps_Codes表,我需要的字段:

SELECT a.ID, a.ECPCodeID, a.RegDate, a.BusName 
FROM ECPs_Registration a 
WHERE SUBSTR(a.ZipCode,1,5) 
IN (
    SELECT SUBSTR(c.Zip,1,5) 
    FROM Reps_Zip c, Reps_Codes b 
    WHERE c.RepCodeID = b.ID 
) 
ORDER BY a.BusName 

我該如何改變它以獲得與第二個查詢相同的結果,但在結果中獲取Reps_Codes字段?

編輯:

我得到相同的結果作爲第一個查詢,如果我做的:

SELECT a.ID, a.ECPCodeID, a.RegDate, a.BusName, b.ID as RepCodeID, b.RepCode 
FROM ECPs_Registration a, Reps_Codes b, Reps_Zip c 
WHERE SUBSTR(a.ZipCode,1,5) = SUBSTR(c.Zip,1,5) AND c.RepCodeID = b.ID 
ORDER BY b.RepCode,a.BusName 

我所尋找的是讓ECPs_Registration表的所有記錄,然後得到一些信息來自Reps_Codes表的那條記錄。 Reps_Codes通過第三個表Reps_Zip連接到ECPs_Registration。

回答

0

有與查詢沒有問題,這是在Reps_Zip在裏面有重複的郵政編碼的問題。

0

問題似乎是您的ECPs_Registration和Reps_Codes不知道如何「對齊」在一起。你需要告訴MySQL它們之間有什麼關係。你可以用JOIN或WHERE子句來做到這一點。

你需要從你的查詢中瞭解到,你讓你的WHERE ... IN子句像一個過濾器,而不是一個細木工。

你可能想嘗試這(對性能沒有保證):

SELECT a.ID, a.ECPCodeID, a.RegDate, a.BusName, b.ID as RepCodeID, b.RepCode 
FROM ECPs_Registration a 
INNER JOIN Reps_Zip c ON SUBSTR(a.ZipCode,1,5)=SUBSTR(c.Zip,1,5) 
INNER JOIN Reps_Codes b ON c.RepCodeID = b.ID 
ORDER BY b.RepCode,a.BusName 
+0

我意識到是這樣,只是不知道如何與他們聯繫。我在另一個我試過的查詢上面加入了一個編輯。表a和b由c連接。 – fanfavorite

+0

@fanfavorite看我的編輯。 – MPelletier

+0

謝謝,這仍然給我與第一次和第三次查詢相同的結果。它顯示比ECPs_Registration中的記錄更多的結果。 – fanfavorite