2011-05-09 54 views
0

我有一個MySQL SELECT查詢,它使用Mysql JOIN從6個表中獲取數據。這裏是我正在使用的MySQL查詢。使用MySQL的問題加入

SELECT 
u.id,u.password, 
u.registerDate, 
u.lastVisitDate, 
u.lastVisitIp, 
u.activationString, 
u.active, 
u.block, 
u.gender, 
u.contact_id, 
c.name, 
c.email, 
c.pPhone, 
c.sPhone, 
c.area_id, 
a.name as areaName, 
a.city_id, 
ct.name as cityName, 
ct.state_id, 
s.name as stateName, 
s.country_id, 
cn.name as countryName 
FROM users u 
LEFT JOIN contacts c ON (u.contact_id = c.id) 
LEFT JOIN areas a ON (c.area_id = a.id) 
LEFT JOIN cities ct ON (a.city_id = ct.id) 
LEFT JOIN states s ON (ct.state_id = s.id) 
LEFT JOIN countries cn ON (s.country_id = c.id) 

雖然查詢工作得很好,但如果在使用LEFT JOIN時發現任何重複值,它有時會返回重複結果。例如在聯繫人表中,存在兩個區域id爲'2'的行,這導致返回另一個重複的行。我如何做一個查詢,只選擇所需的結果沒有任何重複的行。是否有任何不同類型的MySQL加入我應該使用?

謝謝

UPDATE:

這裏是接觸表中,列AREA_ID可能有幾個重複的值。

enter image description here

答:

有在我的最後LEFT條件加入一個錯誤的位置我已經使用(s.country_id = c.id)而不是分裂的查詢和單獨測試後,它應該是(s.country_id = cn.id)我得到跟蹤錯誤。感謝您的答覆。現在它工作得很好。

回答

1

複製像你提到的行似乎表明數據問題。

如果users是您最細粒度的表格,則不應該發生。
我猜的話,那它可能由@dxprog提到單個用戶在contacts

可能使用DISTINCT多個條目,但我認爲GROUP BY是比較合適的位置。 GROUP BY無論哪個數據點都可能被複制.... 畢竟,如果用戶有相應的聯繫人記錄,您打算哪一個JOIN

因爲,只要RDBMS而言,這兩行匹配

LEFT JOIN contacts c ON (u.contact_id = c.id) 

,事實上,不同的已

+0

我已更新我的帖子,請看看。 – 2011-05-09 16:01:50

1

我覺得DISTINCT可能是你在找什麼:

SELECT DISTINCT 
u.id,u.password, 
u.registerDate, 
u.lastVisitDate, 
u.lastVisitIp, 
u.activationString, 
u.active, 
u.block, 
u.gender, 
u.contact_id, 
c.name, 
c.email, 
c.pPhone, 
c.sPhone, 
c.area_id, 
a.name as areaName, 
a.city_id, 
ct.name as cityName, 
ct.state_id, 
s.name as stateName, 
s.country_id, 
cn.name as countryName 
FROM users u 
LEFT JOIN contacts c ON (u.contact_id = c.id) 
LEFT JOIN areas a ON (c.area_id = a.id) 
LEFT JOIN cities ct ON (a.city_id = ct.id) 
LEFT JOIN states s ON (ct.state_id = s.id) 
LEFT JOIN countries cn ON (s.country_id = c.id)

這應該只返回行,其中用戶ID是不同的,雖然你可能無法得到所有連接的數據,你會希望。

+0

使用後必須,如果你想刪除「重複」指定此您代碼它返回相同的一組結果。行正在被複制。 – 2011-05-09 15:43:48