2016-11-22 146 views
1

這裏有一些SQL表:問題與多個表MySQL查詢JOIN

表USERS

id 
1 

表PROJECTS

id 
1 

表位置

id 
1 
2 

表USERS_x_PROJECTS

id  id_USER  id_PROJECT 
1  1   1 

表USERS_x_LOCATIONS

id  id_USER  id_LOCATION 
1  1   1 

表PROJECTS_x_LOCATIONS

id  id_PROJECT  id_LOCATION 
1  1    1 
2  1    2 

用戶被鏈接到項目。用戶和項目之間的鏈接存儲在USERS_x_PROJECTS中。
用戶和項目可以鏈接到位置。鏈接分別存儲在USERS_x_LOCATIONS和PROJECTS_x_LOCATIONS中。

現在讓我們說我是用戶#1。我想要做的是獲取所有項目的位置,其中沒有一個項目的位置與我的位置匹配。

預期結果: 上面的例子中,預期的結果是獲得一個空數組,因爲無論是用戶和數據庫中的唯一項目被鏈接到該位置1#。

實際結果: 我拿到項目#1

我想什麼:

SELECT 
    p.id id, 
    GROUP_CONCAT(DISTINCT l.id SEPARATOR "#") l_ids 
FROM 
    PROJECTS p 
LEFT JOIN 
    PROJECTS_x_LOCATIONS pl ON pl.id_PROJECT = p.id 
LEFT JOIN 
    LOCATIONS l ON l.id = pl.id_LOCATION 
WHERE 
    l.id != 1 
GROUP BY 
    p.id 

感謝您的幫助!

回答

0

我覺得這樣的事情應該工作

SELECT P.id 
FROM PROJECTS P 
INNER JOIN PROJECTS_x_LOCATIONS PL 
    ON P.id = PL.id_PROJECT 
WHERE PL.id_LOCATION NOT IN (
    SELECT id FROM USERS_x_LOCATIONS WHERE id_USER = 1 
) 
+0

謝謝你的回答 – user3006522

0

如果ID足夠了:

select pxl.* 
from PROJECTS_x_LOCATIONS pxl 
where pxl.id_LOCATION not in (select uxl.id_location 
           from USERS_x_LOCATIONS uxl 
           where uxl.id_USER = ?? 
          ); 

??是你的用戶ID。

如果您不僅需要ID,還可以加入其他表格。

+0

謝謝你的回答 – user3006522