2012-01-24 10 views
0

私はちょうどこの質問をMultiple Where conditionsと尋ねましたが、それ以上のことがあると分かりました(他の質問と混同したくありませんでした)。行が存在し、倍数がある場合

私はこのようになりますテーブルがあります。school = Some School 1hidden = 1

場合は、idを見つけ

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') 

:私の前の質問私はこの構文を持っているに

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 

感謝をしかし、問題は、行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

多くのおかげでオレグドク! – daidai

関連する問題