Вложенный запрос sql не видит колонки из внешнего запроса

Есть база данных словаря, которая состоит из большого количества таблиц. Большая часть данных о слове хранится в таблице word, но переводы слов хранятся в отдельной таблице translation и связываются с таблицей word через таблицу развязки word_translation, так как тип связи между словами и переводами - многие ко многим.

Необходимо построить запрос, который будет джоинить все эти таблицы, но при этом возвращать для каждого слова только 1 перевод, а не все существующие. Перевод должен выбираться по условию 1, но если по этому условию не будет найден ни 1 перевод, тогда перевод должен быть выбран с помощью условия 2. Для решения этой задачи идеально подходит функция IFNULL, которой лично я пользуюсь впервые. Запрос построил (скрипт привожу ниже), но он не отрабатывает так как возвращается ошибка с текстом: Unknown column 'w.id' in 'where clause'. Получается, что вложенный запрос внутри IFNULL не видит колонки, которые были извлечены по внешнем запросе. Если закомментировать IFNULL, то скрипт отрабатывает, значит дело действительно во вложенном запросе.

Подскажите пожалуйста, почему вложенный запрос не видит внешние колонки? Как быть в этом случае? Возможно стоит использовать другой подход для написания этого скрипта? В sql я новичок, буду признателен за любую помощь. СУБД - MySQL

SELECT
  w.id,
  w.name,
  w.transcription,
  trans.translation_id
FROM word w
  LEFT JOIN user_word uw ON w.id = uw.word_id
  INNER JOIN (
      SELECT
      wt1.word_id,
      wt1.translation_id, 
      t1.name trans_name
      FROM word_translation wt1
      INNER JOIN word w1 ON wt1.word_id = w1.id
      INNER JOIN translation t1 ON wt1.translation_id = t1.id
      WHERE t1.id = (
                IFNULL(
                  (
                    SELECT uw1.selected_translation_id 
                    FROM user_word uw1 
                    WHERE uw1.user_id = '11565533-3f02-11eb-baee-3cecef0d22ca' 
                    AND uw1.word_id = w.id
                    LIMIT 1
                  ),
                  (
                    SELECT t2.id 
                    FROM translation t2 
                    INNER JOIN word_translation wt ON t2.id = wt.translation_id AND wt.word_id = w.id
                    WHERE t2.name LIKE 'о%'
                    LIMIT 1
                  )
                )
      )
  ) trans ON trans.word_id = w.id

Ответы (0 шт):