我有这些表格:
域可以有多个domain_module_feature(s),domain_module_feature_to_domain表包含3列--dmf_id,dmf_domain_id和dmf_feature_id。为了便于此示例,假设域只有2列--dm_id和dm_name。
我想允许“高级”搜索,我可以看到哪些域使用了哪些功能,例如功能1和2但没有功能3.出于某种原因,我根本无法理解这一点。< / p>
我猜伪sql会像以下一样思考:
SELECT * FROM `domain`
LEFT JOIN domain_module_feature_to_domain ON (`dm_id` = `dmf_domain_id`)
WHERE `dmf_feature_id` = '1' AND `dmf_feature_id` = '2' AND `dmf_feature_id` != '3'
你能帮忙吗?
感谢。
答案 0 :(得分:1)
有些事情......
SELECT *
FROM `domain`
WHERE EXISTS (SELECT *
FROM domain_module_feature_to_domain
WHERE dm_id = dmf_domain_id AND
dmf_feature_id = 1) AND
EXISTS (SELECT *
FROM domain_module_feature_to_domain
WHERE dm_id = dmf_domain_id AND
dmf_feature_id = 2) AND
NOT EXISTS (SELECT *
FROM domain_module_feature_to_domain
WHERE dm_id = dmf_domain_id AND
dmf_feature_id = 3);
编辑:需要功能1和2,而不是1或2。