Я пытаюсь вернуть значения из объединения, где предложение where может не совпадать.
Вот моя схема базы данных
strings
-------
id: INT
name: VARCHAR
value: VARCHAR
fileId: INT FOREIGN KEY files(id)
languages
---------
id: INT
code: CHAR
name: VARCHAR
translations
------------
id: INT
string_id: INT, FOREIGN KEY strings(id)
language_id: INT, FOREIGN KEY languages(id)
translation: VARCHAR
Я пытаюсь выбрать все strings
и все translations
на данном языке. Переводы могут существовать или не существовать для данного языка, но я хочу вернуть strings
любым способом.
Я использую запрос, подобный следующему:
SELECT s.id, s.name, s.value, t.translation
FROM strings s LEFT OUTER JOIN translations t ON s.id = t.string_id
WHERE s.file_id = $1 AND t.language_id = $2
Я хочу возвращать строки независимо от того, найдены ли совпадения в таблице переводов. Если переводы не существуют для данного языка, это поле, конечно, будет нулевым. Я думаю, что проблема в том, что предложение WHERE
имеет t.language_id = ...
, так как language_id
не существует в данном конкретном случае. Но не уверен, что лучший способ это исправить.
База данных Postgresql