Mysql выбрать данные, используя несколько условий - PullRequest
1 голос
/ 26 июля 2010

У меня есть таблица, как

id   fid
20    53
23    53
53    53

Здесь мне нужно вернуть true, когда мое состояние что-то вроде .. where fid=53 and id in(20,23,53) а также мне нужно вернуть false, когда ....where fid=53 and id in(20,24,53). Но вышеприведенное условие не удовлетворяет моему требованию. Оба запроса возвращают то же значение (true). Пожалуйста, помогите мне идти вперед.

Ответы [ 3 ]

3 голосов
/ 26 июля 2010

Я полагаю, что вы запрашиваете, чтобы запрос нашел fid, связанный со ВСЕМИ значениями 20,23,53, а если нет, то этот fid не возвращается запросом.

Существует два распространенных решения этой проблемы в SQL.

Первый, который я рекомендую для MySQL:

SELECT t1.fid
FROM mytable t1
JOIN mytable t2 ON t1.fid = t2.fid
JOIN mytable t3 ON t1.fid = t2.fid
WHERE (t1.id, t2.id, t3.id) = (20,23,53);

Вот еще одно решение, которое использует group by вместо самообъединений, но имеет тенденцию работать хуже в MySQL:

SELECT t.fid
FROM mytable t
WHERE t.id IN (20,23,53)
GROUP BY t.fid
HAVING COUNT(*) = 3;
0 голосов
/ 26 июля 2010

В соответствии с условиями вашего примера, это невозможно с помощью одного запроса :(. поскольку where fid=53 and id in(20,23,53) возвращает true для fid = 53 и id = 20,53 Аналогично, where fid=53 and id in(20,24,53) ложно для fid = 53 и id = 20,53

единственная разница - это id = 23 и id = 24. Таким образом, вы можете сделать это с помощью двух разностных запросов. Но иногда они возвращают истину и ложь для тех же данных.

Я думаю, тебе нужно еще раз подумать над своим вопросом.

0 голосов
/ 26 июля 2010

может быть подзапрос?

SELECT id, fid FROM table
WHERE fid = 53 AND
id IN ( SELECT id FROM table WHERE id IN(20,24,53))
...