Выполнение запроса Oracle между тремя таблицами с использованием INNER JOIN
Я работаю с супер несовместимой базой данных Oracle, и мне нужна помощь, чтобы сделать запрос.
Просто приведя базу данных к примеру, у меня есть эти три таблицы.
TABLE_F
------
id = 3
title = "Hello"
TABLE_M
------
id = 3
category = "val3"
flid = 5
TABLE_X
------
id = 3
body = "How are you?"
flid = 30
id = 3
body= "Bye bye"
flid = 35
Я хочу сделать запрос, чтобы получить следующий результат:
id | title | mat | BODY | OTHER
------------------------------------------
3 helllo val3 How are you? Bye bye
Мой запрос:
SELECT
TABLE_F.title,
TABLE_M.category,
TABLE_X.body as BODY
FROM TABLE_F
INNER JOIN TABLE_M
ON TABLE_F.id=TABLE_M.id
INNER JOIN TABLE_X
ON TABLE_F.id=TABLE_X.id
WHERE TABLE_M.flid=5 AND TABLE_X.flid=30;
Где я получаю:
id | title | mat | BODY
--------------------------------
3 helllo val3 How are you?
Мне нужно добавить в запрос TABLE_X.body as OTHER
(которая содержит строку "Bye bye"), НО я не могу сделать это, поскольку я фильтрую flid=30
для того, чтобы получить тело.
Это не моя база данных, и я не могу изменить дизайн. Мне нужно получить желаемый результат с помощью одного запроса (который я не знаю, если это возможно).
Заранее спасибо.
1 ответ
Решение
Присоединяйтесь к table_x два раза, используя псевдоним
SELECT_F.id,
TABLE_F.title,
TABLE_M.category mat,
TABLE_X.body BODY,
Y.body OTHER BODY,
FROM TABLE_F
INNER JOIN TABLE_M ON TABLE_F.id=TABLE_M.id
INNER JOIN TABLE_X ON TABLE_F.id=TABLE_X.id AND TABLE_X.flid=30
INNER JOIN TABLE_X Y ON TABLE_F.id=Y.id AND Y.flid=35