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). Пожалуйста, помогите мне идти вперед.
3 ответа
Я полагаю, что вы запрашиваете запрос о том, чтобы найти fid, связанный со значениями ALL 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 вместо self-join, но имеет тенденцию работать хуже в MySQL:
SELECT t.fid
FROM mytable t
WHERE t.id IN (20,23,53)
GROUP BY t.fid
HAVING COUNT(*) = 3;
Может быть подзапрос?
SELECT id, fid FROM table
WHERE fid = 53 AND
id IN ( SELECT id FROM table WHERE id IN(20,24,53))
Согласно условиям вашего примера, это невозможно с помощью одного запроса:(. Так как where fid=53 and id in(20,23,53)
верните истину для fid=53 и id =20,53 where fid=53 and id in(20,24,53)
ложно для FID = 53 и ID = 20,53
единственная разница - это id=23 и id=24. Таким образом, вы можете сделать это с помощью двух разностных запросов. Но иногда они возвращают истину и ложь для тех же данных.
Я думаю, вам нужно еще раз подумать над своим вопросом.