SQL-запрос ЛЕВОЕ СОЕДИНЕНИЕ

Допустим, у меня есть эта таблица: Каким должен быть мой sql-запрос, чтобы получить ожидаемый результат?

таблица user_group:

group_id          |   user_id       |   is_active
1                          2               1
1                          3               1
2                          2               1
4                          2               1

группа столов:

id |     name
1       group1
2       group2
3       group3
4       group4
5       group5
6       group5

ожидаемый результат

group_id       |      name      | user_id    |   is_active
 1                   group1         2               1
 2                   group2         2               1
 3                   group3         2               0
 4                   group4         2               1
 5                   group5         2               0
 6                   group6         2               0

Я старался

SELECT g.id, g.name, ug.user_id, ug.is_active
FROM group g
LEFT OUTER JOIN user_group uc ON ug.group_id = g.id
WHERE ug.user_id =2

но у меня есть только группы, в которых пользователь 2 находится в IN (так что group1, group2 и group4)


person Mathieu    schedule 11.09.2012    source источник


Ответы (2)


Попробуй это:

SELECT  id ,
        name ,
        COALESCE(user_ID, 2) user_id ,
        COALESCE(is_active, 0) is_active
FROM    tableGroup
        LEFT JOIN user_group ON id = group_id
                                AND user_Id = 2

Вы можете поиграть с этим здесь

person Kash    schedule 11.09.2012

SELECT g.id, g.name, ug.user_id, ug.is_active 
FROM group g 
LEFT OUTER JOIN user_group uc ON ug.group_id = g.id AND ug.user_id =2 

Когда у вас есть условие в предложении where, вы превращаете левое соединение во внутреннее соединение.

person HLGEM    schedule 11.09.2012
comment
@Mathieu - это помещает NULL в группы 3, 5 и 6 из-за LEFT JOIN. Следовательно, не соответствует ожидаемому результату. Что мне не хватает? Проверьте скрипту. Вы ошиблись вопросом, требующим, чтобы они были NULL вместо 2-0? - person Kash; 11.09.2012
comment
@ Каш, кажется, прав, я не заметил этой части. Если вы согласны, отмените мой выбор в качестве правильного ответа и проверьте его ответ. - person HLGEM; 11.09.2012
comment
да я придумал как закончить работу сам с коалесцей. Спасибо, Каш, я проверил тебя как правильный ответ - person Mathieu; 12.09.2012