MSQL,检索所有项目,即使它没有任何匹配的外部行

时间:2017-04-08 14:21:14

标签: mysql sql

标题表

   | titleId | title |
       1       test5 
       2       test3

订阅表

   | userId | titleId |
       1       1 

在这种情况下,用户1订阅了标题test5。

我想得到什么: 返回标题,如果它们具有指定用户的匹配行,则显示该标题。例如,对于用户1:

title | subscribed
test5      1
test3      -

我想出了这个:

SELECT title.id, title.title, subscribe.userId  FROM title   JOIN subscribe  ON title.id  = subscribe.uesrId 
where  subscribe.userId = 1;
title | subscribed
test5      1

我也想在行下面

test3      -

1 个答案:

答案 0 :(得分:1)

我想你只想要left join

SELECT t.id, t.title, s.userId
FROM title t LEFT JOIN
     subscribe s
     ON t.id  = s.titleId AND s.userId = 1;

请注意,WHERE条件现在必须进入ON子句。

此外,使用表别名使查询更容易编写和阅读。

JOIN条件应该在titleid而不是userid上。

Here是上述查询的SQL小提琴。