Сценарий такой (я использую SQLite):
Книги основных таблиц:
CREATE TABLE "books" (
"bookId" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"bookName" nvarchar NOT NULL COLLATE NOCASE
);
Книги таблиц внешних ключейLang:
CREATE TABLE "booksLang" (
"bookLangId" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"BookId" INTEGER NOT NULL,
"LanguageID" INTEGER NOT NULL,
"BookName" TEXT
);
Данные в книгах:
bookId BookName
1 Genesis
2 Exodus
3 Leviticus
4 Numbers
5 Deuteronomy
Данные в книгахLang:
bookLangId BookId LanguageID BookName_Localization
1 1 12 Genèse
2 2 12 Exode
3 1 10 Schöpfung
4 4 10 Zahlen
Вопрос: Как должен выглядеть запрос, когда заданный languageID равен 12 и должен получиться следующий результат (таблицы, books и booksLang «как-то» объединены - но скажите, как):
bookId BookName BookName_Localization
1 Genesis Genèse
2 Exodus Exode
3 Leviticus ----- (none because there is no localization)
4 Numbers ----- (none because there is no localization)
5 Deuteronomy ----- (none because there is no localization)
Если languageID равен 10, результат должен выглядеть следующим образом:
bookId BookName BookName_Localization
1 Genesis Schöpfung
2 Exodus ----- (none because there is no localization)
3 Leviticus ----- (none because there is no localization)
4 Numbers Zahlen
5 Deuteronomy ----- (none because there is no localization)
Поскольку я не эксперт по SQL, я не понимаю, как всегда получать все записи из таблицы книг и извлечь BookName_Localization из присоединенного, но получить "нулевой" или что-то подобное в нем.
Также могут быть локализации на многих разных языках, но результирующий набор должен всегда содержать только одну запись для каждой основной записи (не меньше или не больше) - обогащается полем BookName_Localization из объединенной таблицы booksLang для данного LanguageID , Значение этого дополнительного поля либо содержит локализованный текст для данного языка, если он существует, либо, если он не существует, должен быть пустым.
Любая помощь приветствуется.
* Отредактировано из-за плохого форматирования