现在有问题让这个查询工作一段时间了:
我有3张桌子:
table 1. projects
-> id, name, ....
table 2. members
-> user_id, project_id, ...
table 3. links
-> user_id, project_id, is_binded
我试图实现的目标:
从projects.id
获取所有projects.name
和projects
,
但只有项目与用户(members.user_id
)
AND is_binded
= false(但只有用户的项目)
OR
(这部分我无法弄清楚)当不存在包含user_id,project_id和is_binded列的记录时。所以,当项目& user_id尚未出现在链接表中。
基本上,查询应返回用户的所有项目,这些项目没有绑定,或者在链接表中没有记录。
查询提出:
SELECT p.id, p.name FROM projects p
JOIN links ml ON p.id = ml.project_id
JOIN members m on p.id = m.project_id
WHERE m.user_id = #{u_id}
AND
(ml.is_binded IS NULL OR (ml.is_binded = 0 AND ml.user_id = #{u_id}))
返回不在表中但不以用户为基础的项目。当记录位于links
且project_id
和user_id
时,我不再获得包含其他user_id
的列表。 #{u_id}是我在ruby中使用的变量。
我希望我的问题有点清楚!
答案 0 :(得分:0)
试试这个,对于SQL Server
SELECT DISTINCT p.*
FROM projects p
INNER JOIN members m ON m.project_id = p.id
LEFT JOIN links l ON l.project_id = p.id and l.user_id = m.user_id
WHERE m.user_id = ?
AND IFNULL(is_binded,'false') = 'false'