我有一個mysql查詢的問題。Mysql查詢左連接條件問題
我使用5個表:
user_has_data(UID,數據ID);用戶(uid,uname); user_in_group(uid,groupid,data);組(groupid,data,packageid);包(packageid,名稱)
所有id都是PK。我想構建一個sql查詢,通過它的uname查找屬於指定dataid的用戶,並檢查用戶是否在屬於指定包的組中(表user_in_group中的關係)(一個組被分配給一個包)。如果是這樣的話,那麼應該提取來自用戶,包和組的數據,否則只應該提取用戶數據。所以我用左聯接,所以我也可以得到用戶沒有組:
SELECT `uac`.`uid`, `u`.`uid`, `uig`.`groupid`, `ag`.`packageid`
FROM `user_has_data` AS `uac`
INNER JOIN `users` AS `u` ON u.uid = uac.uid
LEFT JOIN `user_in_group` AS `uig` ON uig.uid = uac.uid
LEFT JOIN `groups` AS `ag` ON (ag.groupid = uig.groupid) AND (ag.packageid = 2)
WHERE (uac.dataid = '3') AND (u.uname LIKE 'test%')
GROUP BY `u`.`uid`
不幸的是我得到錯誤的結果:我得到具有不同包標識比加入指出,如果用戶有另一組羣分配給他一個不同的packageid。
可能這是因爲第一個左連接沒有對packageid的限制,第二個是左連接,所以它對結果沒有限制(packageid對於所有結果都是NULL,但應該有值)。如果我將第二個左連接更改爲普通連接,則組問題將被修復,但查詢無法找到沒有組的用戶。
任何想法如何解決這個問題甚至可能嗎? 在此先感謝!
乍一看,這可以按預期工作!非常感謝。 – max 2010-10-15 20:08:29