Где A = 1 И A = 2 возвращает 0-рядную проблему - (Короткий вопрос Mysql) - PullRequest
4 голосов
/ 05 мая 2011

У меня есть следующая таблица (id, Tag) со следующими значениями

(1, 17)
(1, 31)
(2, 17)
(3, 31)

Когда я запрашиваю следующее

"SELECT id FROM table WHERE 1 AND Tag=17 AND Tag=31"

Я ожидал, что он вернется (id)

(1)

Но это не так. (возвращает 0 строку)

Что здесь не так?

Ответы [ 3 ]

11 голосов
/ 05 мая 2011

Для любой конкретной строки тег не может быть как 17, так и 31. Вам нужно

SELECT id 
FROM   table 
WHERE  Tag in (17, 31) 
GROUP  BY id 
HAVING COUNT(DISTINCT Tag) = 2  
2 голосов
/ 05 мая 2011

Машины логичны и делают то, что вы от них просили ... в этом случае ваши ожидания неверны.

Тег 17 И тег 31 условия согласно логическая математика должны быть выполненыодновременно для получения результатов.

0 голосов
/ 05 мая 2011

Вы запрашиваете строку со значением Tag, равным 17 И 31 ... одновременно.Вы, вероятно, хотите это (Кроме того, WHERE 1 не требуется):

SELECT DISTINCT id FROM table WHERE Tag=17 OR Tag=31

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

SELECT A.id 
FROM table A JOIN table B ON A.id = B.id 
WHERE A.Tag=17 AND B.Tag=31;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...