2010-04-05 68 views
0

這關係到我的其他問題: Managing Foreign KeysMySQL的 - 加入比賽和非比賽

我想參加比賽和非比賽的表。

所以我有一個興趣列表,用戶列表和用戶興趣列表。

我希望查詢返回所有興趣,無論用戶是否有興趣(在這種情況下應該爲null),只有用戶= x的地方。我每次得到查詢時,都會查詢用戶特有的唯一匹配的興趣,而不管他們是否擁有所有興趣。

回答

0
SELECT * 
FROM interests i 
LEFT JOIN userinterests ui ON i.interestID = ui.interestID 
LEFT JOIN users u ON ui.userID = u.uiserID 
and u.userID = ? 

如果你把在那裏的條件上不應該有記錄inteh主要tbale一個表,你轉換從左側聯接到一起的內連接。唯一一次你應該有一個條件,在左邊加入的右邊的某個事件中,當你搜索的記錄不匹配時(例如,u.userid爲空)

當然,您應該定義要選擇的字段,並且絕對不要在生產代碼中使用select *,特別是在有連接的情況下,因爲它會通過網絡發送重複的信息(重複數據連接加入域),浪費資源和糟糕的編程出於多種原因的練習。

+0

我想選擇*僅僅是爲了例子的緣故,我絕對不會使用它。但是,我不確定這是如何回答我的問題?我需要兩個行和不匹配的行,這就是爲什麼我認爲我可能只能做聯合。 – jwzk 2010-04-05 19:53:50

+0

這應該會給你做和不匹配的行。這是左連接的陰謀。它會提供來自INeterests的所有記錄,如果有用戶附加到這些興趣上,它也將顯示它們。 – HLGEM 2010-04-05 20:36:20

+0

完美!對不起,我猜我錯過了AND而不是WHERE,因爲代碼看起來一樣。謝謝。 – jwzk 2010-04-06 14:09:45

2

你還是使用LEFT JOINS

喜歡的東西

SELECT * 
FROM interests i LEFT JOIN 
     userinterests ui ON i.interestID = ui.interestID LEFT JOIN 
     users u ON ui.userID = u.uiserID 
WHERE userID = ? 

其中用戶ID,你正在尋找。

+0

MySQL中的'LEFT JOIN'代表'LEFT OUTER JOIN'。 – 2010-04-05 18:03:24

+0

由於某種原因我無法工作。我確實發現這可行,但它可能不是最好的。 SELECT * FROM 利益 LEFT JOIN user_interests UI在ui.interest_id = interests.interest_id 其中USER_ID = '1' UNION SELECT * FROM利益 LEFT JOIN user_interests UI在ui.interest_id = interests.interest_id – jwzk 2010-04-05 18:20:49