Несколько Где условия - PullRequest
       13

Несколько Где условия

3 голосов
/ 24 января 2012

Не удается получить правильный синтаксис:

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

ОБНОВЛЕНО: У меня есть связанный, расширенный здесь Есть ли строка и несколько, где

Ответы [ 2 ]

5 голосов
/ 24 января 2012

Вам не нужен второй 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', что всегда ложно).

РЕДАКТИРОВАТЬ : В ответ на комментарий ОП о результатах, которые он пытается получить, вотдругой запрос:

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

Теперь предложения о соединении больше не противоречат друг другу, поскольку они ссылаются на две разные строки m1 и m2.

2 голосов
/ 24 января 2012

Вы не можете иметь несколько предложений WHERE.Я думаю, что вы имеете в виду

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