SQL заявка LEFT JOIN

Да кажем, че имам тази таблица: Каква трябва да бъде моята 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
@Kash изглежда е прав, не забелязах тази част. Ако сте съгласни, моля, премахнете избора ми като правилен отговор и проверете неговия отговор. - person HLGEM; 11.09.2012
comment
да, разбрах как да свърша работата сам с коалесцията. Благодаря ти Каш, проверих те като правилния отговор - person Mathieu; 12.09.2012