2010-01-06 4 views
1

У меня есть четыре таблицы MYSQL 5.0: userdb, filterdb, filterlinkdb, mandatoryfilterdb.Проверка согласованности Mysql между двумя таблицами

Все таблицы просты. * = ПОИ

userdb: 
id* 
name 

filterdb: 
id* 
name 

filterlinkdb: 
user_id* 
filter_id* 

mandatoryfilterdb 
filter_id* 

Как я могу проверить filterlinkdb, чтобы убедиться, что все mandatoryfilterdb записи существуют для каждого user_id, используя один (с или без СУБ) запроса?

Редактировать :: Я забыл сказать, что я хотел бы вернуть значения filter_id из обязательногоdb, которых нет в filterlinkdb для всех user_id, например: пользователь # 1 имеет только фильтр 1, но 1 и 2 находятся в обязательном форматеdb , поэтому он будет возвращать пользователя 1, фильтр 2 (поскольку это отсутствует).

ответ

1

Это должно работать:

select userdb.id,mandatoryfilterdb.filter_id 
from userdb 
    join mandatryfilterdb 
    on 1 
    left join filterlinkdb 
    on userdb.id=filterlinkdb.user_id 
     and mandatryfilterdb.filter_id=filterlinkdb.filter_id 
where filterlinkdb.user_id is null 

Он выбирает все декартов мультипликатор между пользователями и обязательными фильтрами, и проверить их против истинного filterlinkdb стола. Если их там нет (filterlinkdb.user_id is null, вы можете проверить filter_id вместо этого, это то же самое) - чем дать им результат запроса.

Если ни одна запись не была возвращена - вы согласны.

+0

Большое спасибо, я читаю его, чтобы понять его лучше. Я не думаю, что мог бы сам написать этот запрос. Опять же, спасибо. –

Смежные вопросы