MySQL возвращает родительское значение, даже если дочернее значение не существует - PullRequest
0 голосов
/ 10 января 2020

Я работаю с таблицами перевода слов (word и word_translate). Мне нужно получить поле id_word , даже если нет дочерней строки ... но отчасти проблема в том, что я уже фильтрую один из столбцов дочерней таблицы в операторе WHERE.

У меня есть 2 таблицы:

  1. word : id_word, lang, word
  2. word_translate : id_translate, id_word, lang, word

Если я ищу существующий перевод слова (gato, с испанского sh на английский sh):

SELECT
word.id_word AS id_word,
word_translate.id_translate AS id_translate
FROM word LEFT JOIN word_translate ON word_translate.id_word = word.id_word
WHERE word.lang = "es" AND word_translate.lang = "en" AND word.word = "gato"

Возвращает:

  • id_word = 72
  • id_translate = 17

Но, если я ищу перевод слова, который не Существуют (Гато, от испанского sh на португальский):

SELECT
word.id_word AS id_word,
word_translate.id_translate AS id_translate
FROM word LEFT JOIN word_translate ON word_translate.id_word = word.id_word
WHERE word.lang = "es" AND word_translate.lang = "pt" AND word.word = "gato"

Возвращает пустой результат.

Мне нужно, чтобы он вернулся:

  • id_word = 72
  • id_translate = NULL

Вот SQL Скрипка .

Есть идеи? Спасибо!

1 Ответ

1 голос
/ 10 января 2020

Переместите лог c из предложения WHERE в предложение ON:

SELECT
    w.id_word AS id_word,
    wt.id_translate AS id_translate
FROM word w
LEFT JOIN word_translate wt
    ON wt.id_word = w.id_word AND wt.lang = 'en'
WHERE
    w.word = 'gato' AND
    w.lang = 'es';

Примечание. Вы можете оставить ограничения для таблицы word, которая появляется слева сторона соединения, в предложении WHERE.

...