У меня есть 4 стола, USER(ID, USER_ID, NAME), USER_2(ID, USER_ID, EMAIL)
и USER_CLASS_MAP(ID, USER_ID, CLASS_ID)
и CLASS(ID, NAME)
. USER_CLASS_MAP
в основном сопоставляет отношение MANY-MANY между USER
и CLASS
.Сочетание INNER JOIN и IN: Oracle Sql
Необходимо отправить все детали всех пользователей, принадлежащих к определенному классу. У меня есть нерабочий код ниже: любая идея, что я могу делать неправильно, или есть ли другой эффективный способ добиться того же?
Я имею в виду (SQL Inner-join with 3 tables?) для INNER JOIN через несколько таблиц, но здесь проблема в том, что вместо одного пользователя с заданным class_id, я получаю список USER_ID
от USER_CLASS_MAP
.
SELECT USER_ID from USER_CLASS_MAP where CLASS_ID=:classID
Это то, что я в настоящее время:
SELECT USER1.NAME, USER2.EMAIL
INNER JOIN CLASS_USER_MAP as cmap
ON cmap.USER_ID = USER1.ID
INNER JOIN CLASS_USER_MAP as cmap
ON cmap.USER_ID = USER2.ID
Проблема здесь состоит в том, что .id это список!
EXAMPLE:
USER:
(id1, user1, rob)
(id2, user2, bob)
USER_2:
(id1, user1, [email protected])
(id2, user2, [email protected])
USER_CLASS_MAP:
(id1, user1, class1)
(id2, user2, class1)
CLASS:
(class1, Biology)
(class2, Chemistry)
Given:
Get all User Details for class with classId = class1
Output:
[
{USER_ID=user1, NAME=rob, [email protected]},
{USER_ID=user2, NAME=bob, [email protected]}
]
Как ID может быть списком? – Jens
Это было бы заметно улучшено, если бы вы добавили некоторые * выборочные данные * для каждой таблицы и ваши * ожидаемые результаты *. –
Добавить пример данных таблицы и ожидаемого результата. (Также форматированный текст.) – jarlh