#tsql
#tsql
Вопрос:
Я пытаюсь выполнить запрос с помощью оператора SELECT в СОЕДИНЕНИИ, но не смог заставить его работать.
Таблицы, которые у меня есть, приведены ниже :
CREATE TABLE check_result
(id int,
check_result_id int,
id_relation int);
INSERT INTO check_result
values(1, 12, 1), (2,9, 1),(3,13, 3);
CREATE TABLE relation
(id int,
name VARCHAR(20),
id_group int);
INSERT INTO relation
values(1, 'pietje', 1), (2,'klaasje', 1),(3,'Harry', 3);
CREATE TABLE groups
(id int,
name VARCHAR(20),
id_sub int);
INSERT INTO groups
values(1, 'support_worker 1',2),(2, 'support_worker 2',2),(3, 'support_worker 2',3);
Запрос, который у меня есть до сих пор, выглядит примерно так :
SELECT R.name , G.name
FROM check_result CR
LEFT JOIN relation R ON R.id = CR.id_relation
LEFT JOIN groups G ON R.id_group = (SELECT id_sub
FROM groups
WHERE name = 'support_worker 2'
AND id_sub = R.id_group )
В итоге я надеялся получить 3 записи в результатах, но вместо этого их 6, с правильными результатами из групп.
Есть ли кто-нибудь, кто может показать мне, что я делаю неправильно?
Комментарии:
1. Можете ли вы добавить, какие именно ожидаемые результаты будут в табличном формате?
2. запись ‘support_worker 2’ дублируется в таблице групп с идентификаторами 2 и 3
3. Какого результата вы надеетесь достичь? Если вы можете сообщить нам, что вы надеетесь получить в терминах строк / столбцов / значений, это поможет нам предоставить вам соответствующий запрос.
Ответ №1:
С этим набором данных и без ваших ожидаемых результатов трудно дать вам четкий ответ.
SELECT R.name , G.name
FROM check_result CR
LEFT JOIN relation R ON R.id = CR.id_relation
LEFT JOIN groups G ON G.id_sub = R.id_group and G.name = 'support_worker 2'
Вы упомянули, что хотите получить все 3 результата, но ваш дополнительный выбор приводил к появлению повторяющихся записей.
Разве это не тот случай, когда, как указано выше, не нужно полагаться на дополнительный выбор и просто добавлять дополнительные условия в ваше левое соединение?
Стоит упомянуть еще одну вещь — поскольку я мало что знаю о вашей структуре базы данных, но если у Groups есть идентификатор, на который ссылаются в R.id_group, тогда вам следует присоединиться к нему, а не к Id_sub, что изменило бы ваш код на:
SELECT R.name , G.name
FROM check_result CR
LEFT JOIN relation R ON R.id = CR.id_relation
LEFT JOIN groups G ON G.id = R.id_group and G.name = 'support_worker 2'
Дает тот же результат при ограниченных данных.
Комментарии:
1. спасибо, это в целом помогает!!! также помог мне в понимании…