MySQL使用extra子句离开连接返回不匹配的行

时间:2015-06-30 07:28:25

标签: mysql left-join

我有一个翻译表

id | language | tr_text | orig_id

orig_id用于引用原始文本,例如

id | language | tr_text | orig_id
 1 | EN | Hello | 1
 2 | EN | Bye | 2
 3 |DE | Hallo | 1

现在我正在尝试生成一个查询,该查询为我提供了所有原始术语和所有已翻译的术语,并且在没有输入翻译的情况下使用空值:

SELECT TransOrg.id, TransOrg.tr_text, TransOrg.tr_Language, TransLang.id, TransLang.tr_text, TransLang.tr_Language
FROM Translations AS TransOrg
LEFT JOIN Translations AS TransLang
ON TransOrg.id = TransLang.orig_id
AND TransOrg.Language = 'EN' AND TransLang.Language = 'DE'

然而,这会返回我想要的内容以及DE翻译:

1 | Hello | EN | 3 | Hallo | DE
2 | Bye | EN | null | null | null  
3 | Hallo | DE | null | null | null  < why is this here?! 

我以为

AND TransOrg.Language = 'EN' 

条件会阻止此

1 个答案:

答案 0 :(得分:1)

您应该在TransOrg.Language = 'EN'子句中设置WHERE,以防止它显示在结果集中。

SELECT TransOrg.id, TransOrg.tr_text, TransOrg.tr_Language, TransLang.id,
  TransLang.tr_text, TransLang.tr_Language
 FROM Translations AS TransOrg
 LEFT JOIN Translations AS TransLang
 ON (TransOrg.id = TransLang.orig_id AND TransLang.Language = 'DE')
 WHERE TransOrg.Language = 'EN';