Mysql查询混乱

时间:2010-08-04 15:43:29

标签: sql mysql

我有这些表格:

  • domain_module
  • domain_module_feature
  • domain_module_feature_to_domain

域可以有多个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'

你能帮忙吗?

感谢。

1 个答案:

答案 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。