2009-12-01 2 views
1

Имея две таблицы, «пользователи» и «списки», а также таблицу «подписки» для многих из многих (таким образом, имея внешние ключи user_id и list_id), какой будет один запрос SQL, чтобы найти всех пользователей, у которых нет подписки с определенным list_id (естественно, включая пользователей, у которых нет подписки вообще)?SQL-запрос для поиска пользователей, которые не имеют подписки на указанный список (многие-ко-многим)

+0

Я удалил свой ответ, так что этот вопрос должен появиться в списке без ответа. Надеюсь, кто-то, кто лучше понимает вашу проблему, даст вам лучший ответ. – Welbog

+0

Вам должно быть ясно, что вы не хотите видеть пользователя, если у него есть ** любая ** задача с 'завершено = 1'. – Welbog

+0

@Welbog: Большое спасибо, я переформулировал проблему, чтобы этот пример стал более практичным. – mxgrn

ответ

2

Время вырваться not exists снова:

select 
    u.user_id 
from 
    users u 
where 
    not exists (
    select 1 from subscriptions s where s.user_id = u.user_id and s.list_id = N 
) 
+0

Работает отлично, спасибо! Никогда не слышал о существовании. – mxgrn