2017-03-03 75 views
-1

我有兩個表,fos_user和區域 與MySQL的左連接方面條件都排連接

  • fos_user {idnameenabled}
  • zone {idfos_user_idenabled}

每個fos_user可以存在多於zone

我需要過濾fos_users僅具有zoneenabled=1

我嘗試用

SELECT * FROM fos_user as u 
LEFT JOIN zona as z ON u.id=z.users_id 
WHERE z.enabled=1 AND u.enabled=1 

,但我得到的fos_user有與enabled=1

幾乎一個區域列表我怎麼能固定?

謝謝

+0

如果一個用戶沒有'zone'記錄? – shmosel

回答

1

您需要第二個條件來排除未啓用區域中的用戶。

SELECT * 
FROM fos_user AS u 
INNER JOIN zone AS z on u.id = z.users_id 
LEFT JOIN zone AS z1 on u.id = z1.users_id AND z1.enabled = 0 
WHERE u.enabled = 1 AND z.enabled = 1 
AND z1.id IS NULL 

您使用INNER JOIN精確匹配的區域,並使用LEFT JOINNULL測試,以找出用戶是匹配標準(見Return row only if value doesn't exist)。

+0

它的工作原理,謝謝 –

+0

如果解決了問題,您應該接受答案。 – Barmar

1

可以按用戶組,並比較啓用了區域的數量對區的總數:

SELECT * 
    FROM fos_user u 
    JOIN zone z ON u.id = z.users_id 
WHERE u.enabled = 1 
GROUP BY u.id 
HAVING SUM(z.enabled = 1) = COUNT(*); 
+0

它的工作原理,謝謝 –