2010-08-04 63 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