2016-08-26 4 views
0

SQL 쿼리에 문제가 있습니다. 작업 표와 job_feature가 있습니다. 이제 각 작업의 목적은 많은 기능을MYSQL 자세한 조건 쿼리

예를 가지고 : Select job has feature (1 or 2) and 9. 고급 : 작업 1 기능 1, 2, 9 그래서 지금 내가하는 쿼리를 필요가있다. Select job has feature (1 or 2 or 3) and (9 or 10) 및 ... 이 쿼리

SELECT * 
FROM `m_job` as job 
JOIN `d_job_feature` as jf ON job.id= jf.job_id 
WHERE (jf.feature_id = 1 OR jf.feature_id = 2) 
AND jf.feature_id = 9; 

를 사용하는 경우는 => 내가 어떻게 쿼리에 대한 SQL이 데이터를 사용 할 수 있습니다, 그래서 지금 빈 데이터

을 반환합니다. 감사합니다.

답변

2

쿼리의 문제는 특정 행에 대한 feature_id이 1 또는 2와 9와 같을 수 없다는 것입니다. 대신에 group by으로 기능을 그룹화해야합니다. 그런 다음 condition aggregation을 사용하여 두 기능이 특정 기능에 대해 존재할 수 있는지 확인할 수 있습니다. 여기

하나의 옵션이 exists을 사용하고 :

select * 
from m_job as m 
where exists (
    select 1 
    from d_job_feature as d 
    where m.id=d.job_id 
    group by d.job_id 
    having max(case when d.feature_id in (1,2,3) then 1 else 0 end) = 1 and 
      max(case when d.feature_id in (9,10) then 1 else 0 end) = 1 
) 
+0

굉장하고 완벽합니다. 너 정말 고마워. – dungphanxuan

1

당신이 두 개의 쿼리를 결합하면?

SELECT * 
FROM (
    SElECT`m_job` as job 
JOIN `d_job_feature` as jf ON job.id= jf.job_id 
WHERE jf.feature_id in(1,2,3) 
) as t1 INNER JOIN 
(
SELECT job.id 
FROM `m_job` as job 
JOIN `d_job_feature` as jf ON job.id= jf.job_id 
WHERE jf.feature_id IN (9,10) 
) as t2 ON t2.id ==t1.id 
+0

리오 감사합니다. @sgeddes를 따르고 완벽합니다. 내 데이터베이스에 더 많은 기능이 있습니다. '작업 선택 기능 (1 또는 2 또는 3) 및 (9 또는 10) AND (12 또는 15) ...'쿼리에 대한 예제. 해당 쿼리를 사용하는 경우 매우 복잡합니다. – dungphanxuan

+1

아무런 문제가 없습니다. 나는 @sgeddes처럼 그렇게 할 생각은 결코하지 못했다. 새로운 것을 배우는 것을 좋아합니다! 행운을 빕니다 – Rio