2010-08-04 6 views
0

내가이 테이블이 : 도메인 많은 domain_module_feature (들)을 가질 수 MySQL의 쿼리 혼란

  • domain_module
  • domain_module_feature
  • domain_module_feature_to_domain

    • 도메인의 domain_module_feature_to_domain 표 포함 3 열 - dmf_id, dmf_domain_id 및 dmf_feature_id 이 예제의 용이함을 위해 도메인에 dm_id와 dm_name이라는 두 개의 열만있는 것으로 가정합니다.

      어떤 도메인에서 어떤 기능을 사용하는지 "고급"검색을 허용하고 싶습니다. 예를 들어 기능 1과 기능 2는 있지만 기능 3은 사용할 수 없습니다. 어떤 이유로 든이 기능을 전혀 사용할 수 없습니다.

      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' 
      

      당신이 도와 줄 수 :

      는 내가 의사-SQL이 같은 somethink 것 같아요?

      감사합니다. 의 라인을 따라

    답변

    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이 아닌 OR

    +0

    2 만 1의 dmf_feature_id을 가질 필요가 *와 *이 1이 아닌 기능 * 또는 * – robjmills

    +0

    내 실수. 그에 따라 내 대답을 편집했습니다. –