MySQL 左连接带有额外的子句 returns 不匹配的行
MySQL left join with extra clauses returns unmatched rows
我有翻译table
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'
这 returns 我想要的加上 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'
条件会阻止这个
您应该在 WHERE
子句中包含 TransOrg.Language = 'EN'
以防止它显示在结果集中。
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';
我有翻译table
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'
这 returns 我想要的加上 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'
条件会阻止这个
您应该在 WHERE
子句中包含 TransOrg.Language = 'EN'
以防止它显示在结果集中。
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';