两个表之间的Mysql一致性检查

时间:2010-01-06 19:35:03

标签: mysql

我有四个MYSQL 5.0表:userdb,filterdb,filterlinkdb,mandatoryfilterdb。

所有表都很简单。 * = pri

userdb:
 id*
 name

filterdb:
 id*
 name

filterlinkdb:
 user_id*
 filter_id*

mandatoryfilterdb
 filter_id*

如何检查filterlinkdb以确保使用单个(有或没有subs)查询为每个user_id存在所有mandatoryfilterdb记录?

编辑::我忘了说,我想从mandatorydb中返回所有user_id中不存在的mandatorydb的filter_id值,例如:user#1只有filter 1,但是1和2在mandatorydb中,所以它会返回用户1,过滤器2(因为它缺失)。

1 个答案:

答案 0 :(得分: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而不是相同) - 而不是在查询结果中提供它们。

如果没有记录返回 - 你是一致的。