我有
表:文章

ID | CONTENT
---------------
1  | the quick
2  | brown fox
3  | jumps over
4  | the lazy

表:作者
ID | NAME
----------
1  | paul
2  | mike
3  | andy

表:文章作者
ARTICLE_ID | WRITER_ID
-----------------------
1          | 1
2          | 2
3          | 3

总而言之,第4条没有作者。
所以当我“搜索”带有“the”的文章时:
SELECT a.id, a.content, w.name
FROM articles a, writers w, articles_to_writers atw
WHERE a.id=atw.article_id AND w.id=atw.writer_id AND content LIKE '%the%'

第4条未出现在结果中:
ID | CONTENT   | NAME
-----------------------
1  | the quick | paul

如何使第4条即使没有作者也仍然出现在结果中?

最佳答案

请尝试以下查询:

SELECT a.id, a.content, w.name
FROM articles a LEFT JOIN articles_to_writers atw ON a.id = atw.article_id
  LEFT JOIN writers w ON w.id=atw.writer_id
WHERE a.content LIKE '%the%'

原始查询使用旧的SQL语法在所有表之间创建隐式内部联接。内部联接要求联接的每个表中都有匹配的记录。
在上面修改过的查询中,使用左外联接“附加”表。这将允许连接左侧的记录出现在最终结果集中,即使writer中没有匹配的行。writer中的列对于这些“额外”行将具有空值。

10-06 04:50
查看更多