2012-01-24 185 views
3

有麻煩這個語法正確:多個where條件

SELECT DISTINCT id 
FROM metadata 
WHERE (meta_key = 'school' AND meta_value = 'Some School') 
AND WHERE (meta_key = 'hidden' AND meta_value = '1') 

其未能在第4行...

更新: 表看起來是這樣的:

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

更新:我有一個相關的,在這裏擴展Does row exist and multiple where

回答

5

你並不需要第二個where,第二and,可能是爲了爲or

SELECT DISTINCT id 
FROM metadata 
WHERE (meta_key = 'school' AND meta_value = 'Some School') 
OR (meta_key = 'hidden' AND meta_value = '1') 

(我想你想的or的原因是因爲否則你有矛盾的條款的結合meta_key = 'school' AND meta_key = 'hidden',這總是假的)。

編輯:針對OP的一下,結果他正在試圖獲得評論,這裏是一個不同的查詢:

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') 
AND (m2.meta_key = 'hidden' AND m2.meta_value = '1') 

現在一起條款不再是矛盾的,因爲它們指的是兩個不同的行m1m2

+0

但我需要他們兩個都是真實的查詢工作。 – daidai

+0

有幾行有相同的ID但不同的學校和隱藏的鑰匙,我需要找到一個學校的名稱,並找出它的隱藏 – daidai

+0

@daidai你需要一個完全不同的查詢。我剛剛編輯了我的答案。 – dasblinkenlight

2

您不能有多個WHERE子句。我認爲你的意思是

SELECT DISTINCT id 
FROM metadata 
WHERE (meta_key = 'school' AND meta_value = 'Some School') 
    OR (meta_key = 'hidden' AND meta_value = '1') 
+0

Darn,@dasblinkenlight擊敗了我:) –