根据不存在的记录查询SQL

时间:2016-05-04 08:02:02

标签: mysql

现在有问题让这个查询工作一段时间了:

我有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.nameprojects, 但只有项目与用户(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}))

返回不在表中但不以用户为基础的项目。当记录位于linksproject_iduser_id时,我不再获得包含其他user_id的列表。 #{u_id}是我在ruby中使用的变量。

我希望我的问题有点清楚!

1 个答案:

答案 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'