SQLite запрос на выбор, если внутренний запрос на соединение не существует - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть две таблицы, одна для всех продуктов, которые содержат идентификатор продукта, название по умолчанию и другие значения продуктов.

Другая таблица предназначена для перевода названия продукта, который содержит идентификатор продукта, идентификатор языка, перевод.

Что я хочу сделать, так это объединить эти таблицы с помощью идентификатора еды, чтобы получить перевод для идентификатора еды, например, = 5 и идентификатора языка = 1, который, например, является испанским sh. и я делаю это следующим образом:

SELECT * 
FROM Foods 
INNER JOIN FoodNameTranslations USING(Food_ID) 
WHERE Food_ID = 5 
AND Language_ID = 1

А что если в таблице 'FoodNameTranslations' нет перевода для Food_ID 5 и Language 1? затем я хочу просто получить строку еды с идентификатором еды = 5 из таблицы «Продукты» (которая содержит имя по умолчанию).

Как я могу сделать один запрос, который делает это? спасибо!

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы бы сделали ЛЕВОЕ СОЕДИНЕНИЕ и поместили идентификатор языка в условие соединения.

SELECT
    COALESCE(t.TranslatedName, f.DefaultName) FoodName 
FROM 
    Foods f
    LEFT JOIN FoodNameTranslations t ON t.Food_ID = f.Food_ID AND t.Language_ID = 1
WHERE
    f.Food_ID = 5
0 голосов
/ 28 февраля 2020

Вы делаете это, изменяя условие JOIN:

INNER JOIN получает все записи, которые являются общими для обеих таблиц, на основе предоставленного предложения ON.

LEFT JOIN получает все записи из LEFT связанный и связанная запись из правой таблицы, но если вы выбрали несколько столбцов из RIGHT таблицы, если нет связанных записей, эти столбцы будут содержать NULL.

RIGHT JOIN, как и выше, но получает все записи в ПРАВИЛЬНОЙ таблице.

FULL JOIN получает все записи из обеих таблиц и помещает NULL в столбцы, где связанных записей не существует в противоположной таблице.

Попробуйте использовать LEFT JOIN вместо INNER ПРИСОЕДИНЯЙТЕСЬ, ваш запрос будет выглядеть следующим образом: SELECT * FROM Foods LEFT ПРИСОЕДИНЯЙТЕСЬ FoodNameTranslations ИСПОЛЬЗОВАТЬ (Food_ID) WHERE Food_ID = 5 AND Language_ID = 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...