多表联接上的MySQL查询问题

多表联接上的MySQL查询问题,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,以下是一些sql表: 表用户 表项目 表位置 表用户\u x\u项目 表用户\u x\u位置 表项目×位置 用户链接到项目。用户和项目之间的链接存储在用户和项目中。用户和项目可以链接到位置。链接分别存储在用户位置和项目位置 现在让我们假设我是用户1。我想做的是获取所有项目及其位置,其中没有一个项目的位置与我的位置匹配 预期结果: 在上面的示例中,预期的结果是获得一个空数组,因为用户和数据库中唯一的项目都链接到位置#1 实际结果: 我得到了这个项目 我的尝试: SELECT p

以下是一些sql表:

表用户


表项目


表位置


表用户\u x\u项目


表用户\u x\u位置


表项目×位置


用户链接到项目。用户和项目之间的链接存储在用户和项目中。
用户和项目可以链接到位置。链接分别存储在用户位置和项目位置

现在让我们假设我是用户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 

谢谢你的帮助

我认为这样做应该行得通

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
)

我觉得这样应该行得通

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
)

如果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,还可以加入其他表。

如果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,还可以加入其他表

id      id_PROJECT      id_LOCATION
1       1               1
2       1               2
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 
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
)
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 = ??
                             );