我有四个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(因为它缺失)。
答案 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
而不是相同) - 而不是在查询结果中提供它们。
如果没有记录返回 - 你是一致的。