代码之家  ›  专栏  ›  技术社区  ›  robjmills

MySQL查询混乱

  •  0
  • robjmills  · 技术社区  · 14 年前

    我有这些桌子:

    • 领域
    • 域名模块
    • 域\模块\功能
    • 域\模块\功能\到\域

    一个域可以有许多域\模块\功能,域\模块\功能\到\域表包含3列-dmf_id、dmf_domain_id和dmf_feature_id。为便于本例,假设域只有2列-dm_id和dm_name。

    我想允许“高级”搜索,在这里我可以看到哪些域使用了哪些功能,例如,有功能1和2,但没有功能3。因为某种原因,我根本无法理解这件事。

    我想伪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 回复  |  直到 14 年前
        1
  •  1
  •   Brian Hooper    14 年前

    有点像…

    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。