SQL。两个表之间错综复杂的JOIN

时间:2012-03-20 23:28:44

标签: sql join many-to-many

我有2个表:用户订阅者。用户与订阅者的关系是多对多

table users http://s019.radikal.ru/i621/1203/5c/bbfa4d42e678.jpg

table subscribers http://s018.radikal.ru/i522/1203/7b/e7e61e6ba26d.jpg

我知道如何吸引所有用户:

SELECT * FROM users

而且我也知道如何通过他的id(例如id = 1)获得给定用户的订阅者:

SELECT * FROM users LEFT JOIN subscribers ON id = user_id WHERE user_id = 1 

但是我需要这些结果不是分开但是在一起。

也就是说,我想创建一个查询来获取所有用户。 但是除了它们的属性之外,查询结果必须包含属性,它显示每个用户是否是订阅者。 像这样:

table subscribers http://s019.radikal.ru/i622/1203/02/56eaf26cc442.jpg

当然我想避免使用子查询。只使用JOIN会很棒。如果这种情况有可能。

提前致谢!

3 个答案:

答案 0 :(得分:2)

你可以这样做:

SELECT u.*, 
        CASE WHEN s.user_id IS NULL THEN 'false' ELSE 'true' END as IsSubscriber 
FROM users u 
   LEFT JOIN subscribers s ON u.id = s.user_id

...当用户不在s.user_id表格中时,null将由left join subscribers生成{{1}}。

答案 1 :(得分:0)

我更新了您的查询以获得您想要的结果。

SELECT u.id, u.firstName, u.lastname, WHEN s.user_id IS NULL 'false' else 'true' END as IsSubscriber.
FROM users u
LEFT JOIN subscribers s 
   ON u.id = s.user_id 
WHERE user_id = 1  

答案 2 :(得分:0)

SELECT users.id, users.firstname, users.lastname, COUNT(subscribers.user_id) != 0 AS isSubscriber
  FROM users
  LEFT JOIN subscribers ON users.id = subscribers.user_id
  GROUP BY users.id, users.firstname, users.lastname