2015-06-30 1 views
0

У меня есть таблица переводов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

Вы должны 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'; 
+0

Я попытался добавить предложение where, но оно все время давало мне ошибку, не могли бы вы показать мне, где должно быть предложение. Спасибо – jimmy

+0

Я отредактировал ответ. Это должно дать вам все английские оригиналы, а также все переводы DE, если они существуют. – vhu

Смежные вопросы