多个表JOIN上的MySQL查询问题

时间:2016-11-22 01:06:38

标签: mysql sql join left-join

以下是一些sql表:

表USERS

id
1

表项目

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 

感谢您的帮助!

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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,还可以加入其他表格。