2010-08-04 55 views
0

我有这些表: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.出于某种原因,我无法让我的头在这一点。

我猜的伪SQL将somethink像:

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

东西...

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.

+0

但它需要有1 dmf_feature_id *和* 2没有1 *或* 2 – robjmills 2010-08-05 08:21:17

+0

我的错误。我相应地编辑了我的答案。 – 2010-08-05 09:47:45