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