MySQL Join需要显示LEFT表中的所有记录

时间:2017-07-18 21:35:41

标签: mysql

我想知道是否有人可以提供帮助。

请参阅以下内容:

  

SELECT id,name FROM words;

ID,姓名

1,仍然

2,闪闪发光

3,Fizzy

  

SELECT * from translation;

words_id,lang_id,翻译

1,1,ASTIll

1,2,BStill

2,1,ASparkling

我需要如下结果:

id,name,lang_id,translation

1,Still,1,ASTIll

2,Sparkling,1,ASparkling

3,Fizzy,NULL,NULL

我试过的查询

  

SELECT id,name,lang_id,translation FROM words LEFT JOIN translation ON words_id = id AND lang_id = 1;

http://sqlfiddle.com/#!9/f544b/3

非常感谢

1 个答案:

答案 0 :(得分:0)

您的条件lang_id=1会将您的LEFT JOIN变为INNER JOIN。原因是当条件不满足时(即translation表中没有条目),它将不会显示它。如果要显示左表中的所有内容,请删除条件lang_id=1

SELECT id,name,lang_id,translation 
FROM words 
LEFT JOIN translation ON words_id=id

如果您需要这个条件,可以将它放在子查询中。

SELECT id,name,lang_id,translation 
FROM words w
LEFT JOIN (
    SELECT * 
    FROM translation
    WHERE lang_id = 1
) t ON t.word_id = w.id