2016-11-22 207 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