2010-07-26 2 views
1

У меня есть таблица, какMysql выбирать данные с использованием нескольких условий

id fid 
20 53 
23 53 
53 53 

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

+1

Er, есть достоверные данные для обоих запросов, что, вероятно, почему вы получаете истинное значение для обоих ... – Amber

ответ

3

Я считаю, что вы просите для запроса, чтобы найти FID, который связан со всеми значениями 20,23,53 и, если нет, то, что груда не возвращается в запросе.

В 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); 

Вот еще одно решение, которое использует группу, вместо того, чтобы самостоятельно присоединяется, но, как правило, работают хуже в MySQL:

SELECT t.fid 
FROM mytable t 
WHERE t.id IN (20,23,53) 
GROUP BY t.fid 
HAVING COUNT(*) = 3; 
0

Возможно, подзапрос?

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

По ваш пример условий, его невозможно с одним запросом :( с where fid=53 and id in(20,23,53) return true для fid = 53 и id = 20,53 Аналогично, where fid=53 and id in(20,24,53) является ложным для fid = 53 и id = 20,53

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

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

Смежные вопросы