2012-01-24 6 views
0

방금이 질문을 Multiple Where conditions에 요청했지만 그 이상이 있다는 것을 깨달았습니다 (다른 질문을 혼동하고 싶지 않았습니다). 나는이 구문이 내 앞의 질문에행이 존재하고 배수가 있습니까?

meta_id - id - meta_key  - meta_value 
1   1 school   Some School 1 
2   2 school   Some School 2 
3   2 hidden   1 
4   3 school   Some School 3 
5   4 school   Some School 4 
6   5 school   Some School 5 
7   5 hidden   1 

감사 :

내가 이렇게 보이는 테이블이

SELECT DISTINCT m1.id 
FROM metadata m1 
join metadata m2 on m1.id = m2.id 
WHERE (m1.meta_key = 'school' AND m1.meta_value = 'Some School 1') 
AND (m2.meta_key = 'hidden' AND m2.meta_value = '1') 

ID를 발견 한 경우 school = Some School 1hidden = 1

그러나 문제는 행 hidden이 숨겨져있는 경우에만 존재한다는 것입니다. 숨겨져 있지 않으면 존재하지 않습니다. 따라서처럼 쉽지는 않습니다.은 숨겨진 것이 아니며 hidden = 1은 숨겨진 것을 의미합니다.

school = Some School 1을 찾아야하고 id과 동일한 경우 hidden 행이 존재하지 않습니다.

답변

1
SELECT DISTINCT m1.id 
FROM metadata m1 
WHERE 
    m1.meta_key = 'school' 
AND m1.meta_value = 'Some School 1' 
AND NOT EXISTS 
(
    SELECT * FROM metadata m2 
    WHERE 
     m2.meta_key = 'hidden' 
    AND m2.meta_value = '1' 
    AND m2.Id = m1.Id 
) 
+0

많은 감사 Oleg Dok! – daidai

관련 문제