我有
表:文章
ID | CONTENT
---------------
1 | the quick
2 | brown fox
3 | jumps over
4 | the lazy
表: WRITERS
ID | NAME
----------
1 | paul
2 | mike
3 | andy
表: ARTICLES_TO_WRITERS
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条仍然出现在结果中?
答案 0 :(得分:5)
尝试以下查询:
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语法在所有表之间创建隐式INNER连接。 INNER联接需要在每个连接的表中匹配记录。
在上面的修订查询中,使用LEFT OUTER连接“附加”表。这将允许连接左侧的记录显示在最终结果集中,即使编写器中没有匹配的行也是如此。来自writer的列将具有这些“额外”行的NULL值。
答案 1 :(得分:2)
SELECT A.ID, A.CONTENT, W.NAME
FROM
ARTICLES A
LEFT JOIN ARTICLES_TO_WRITERS ATW ON ATW.ARTICLE_ID = A.ID
LEFT JOIN WRITERS W ON W.ID = ATW.WRITER_ID
WHERE A.CONTENT LIKE '%the%'
答案 2 :(得分:1)
ANSI格式:
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
acontent LIKE '%the%'
这是一个左连接,这意味着即使没有作家,也会显示所有文章。