Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как написать такой запрос?  [new]
romaro
Member

Откуда:
Сообщений: 173
Есть 3 таблицы:

Доступные языки:
CREATE TABLE site.lang (
	id serial4 NOT NULL,
	title varchar(50) NOT NULL,
	"key" varchar(2) NOT NULL,
	CONSTRAINT lang_pk PRIMARY KEY (id)
);


Темы обращений:
CREATE TABLE site.feedback_theme (
	id serial4 NOT NULL,
	state int4 NOT NULL DEFAULT 1,
	title varchar(255) NOT NULL,
	priority int4 NULL,
	CONSTRAINT feedback_theme_pk PRIMARY KEY (id)
);


Переводы этих тем:
CREATE TABLE site.feedback_theme_lang (
	id serial4 NOT NULL,
	lang_id int4 NOT NULL,
	theme_id int4 NOT NULL,
	"translate" varchar NOT NULL,
	CONSTRAINT feedback_theme_lang_pk PRIMARY KEY (id),
	CONSTRAINT feedback_theme_lang_uk UNIQUE (lang_id, theme_id)
);


-- site.feedback_theme_lang foreign keys

ALTER TABLE site.feedback_theme_lang ADD CONSTRAINT feedback_theme_lang_fk FOREIGN KEY (lang_id) REFERENCES site.lang(id);
ALTER TABLE site.feedback_theme_lang ADD CONSTRAINT feedback_theme_lang_fk2 FOREIGN KEY (theme_id) REFERENCES site.feedback_theme(id);


Для некоторых тем могут отсутствовать переводы.
Как получить результат в виде таблицы из двух колонок feedback_theme_id, translate , которая будет содержать список всех тем из таблицы site.feedback_theme но в случае, если для такой темы отстуствует перевод в site.feedback_theme_lang, то следует показать в качестве дефолта значение из колонки feedback_theme.title

Пока что хватило ума только на то, чтобы получить все нужные варианты переводов (идеальное состояние таблицы feedback_theme_lang):
SELECT ft.id, ft.title, l.KEY
FROM site.feedback_theme ft 
CROSS JOIN site.lang l
;
4 ноя 21, 16:16    [22391974]     Ответить | Цитировать Сообщить модератору
 Re: Как написать такой запрос?  [new]
Ы2
Member

Откуда:
Сообщений: 251
romaro, вам нужен дополнительный join на таблицу с переводами и для вывода — coalesce(перевод, строка_по-умолчанию)
5 ноя 21, 20:19    [22392280]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить