以下是一些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
感谢您的帮助!
答案 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,还可以加入其他表格。