MySQL реляционный вопрос.Получить результаты, когда M: N ноль - PullRequest
0 голосов
/ 09 июня 2011

-Goal-

Я хотел бы получить пользователей, у которых нет записи в таблице 'bar'. Эти пользователи также будут принадлежать к определенной «группе пользователей» и имеют ограничения внутри самой таблицы «пользователей».

Упрощенная структура таблицы

Пользователь

userid - auto-increment    
username - string    
userage - integer    
usergroup_usergroupid - foreign key

1010 * группа пользователей * usergroup - auto-increment usergroupname - string user_has_bar

user_userid - foreign key    
bar_barid - foreign key

- Запрос ... пока -

SELECT username     
FROM user as u, usergroup as ug, user_has_bar as ub    
WHERE    
u.usergroup_usergroupid = ug.usergroupid AND    
u.userage = 10 AND  <-- lets pretend this exists    
u.location_locationid = 1 AND <-- Same here     
u.userid ... ub.user_userid;

-Headache-

Именно эта последняя строка заставляет меня бросать пробелы. Я полагаю, что из того, что я прочитал, способ выполнить эту операцию - с помощью LEFT JOIN. Однако все, что я прочитал до сих пор, оказывается довольно запутанным.

Если возможно, я хотел бы сохранить эту операцию в запросе mySQL, а затем оптимизировать ее позже. Она создается с помощью генератора PHP mySQL, который я кодировал, и я хотел бы понять простой синтаксис, а затем углубиться в него. Любой подход очень приветствуется, хотя

Спасибо, что прочитали этот вопрос.

1 Ответ

2 голосов
/ 09 июня 2011
SELECT username
    FROM user u
        INNER JOIN usergroup ug
            ON u.usergroup_usergroupid = ug.usergroupid 
        LEFT JOIN user_has_bar ub
            ON u.userid = ub.user_userid
    WHERE u.userage = 10
        AND u.location_locationid = 1
        AND ub.user_userid IS NULL
...