2012-07-19 39 views
0

正如標題所暗示的那樣,重寫這種方法的唯一方式是將排除作爲聯接進行排序?我該如何使用連接而不使用子查詢來創建此查詢?

select users.id from users where id not in ("select 
pu.owner_id from projects p 
inner join 
projects_users pu on 
pu.owned_project_id = p.id 
where p.project_name = 'This is an example of a project'") 

我想這可能會奏效,但它沒有返回來自用戶的任何不project_users存在:

select u.id from users u 
     left outer join projects_users pu on 
     pu.owner_id = u.id 
     inner join projects p on 
     pu.owned_project_id = p.id   
     where NOT p.project_name = 'This is an example of a project' 

回答

3
SELECT a.id 
FROM  users a 
LEFT JOIN project_users b ON a.id = b.owner_id 
LEFT JOIN projects c ON b.owned_project_id = c.id AND 
      c.project_name = 'This is an example of a project' 
WHERE  c.id IS NULL