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. Таким образом, вы можете сделать это с помощью двух разностных запросов. Но иногда они возвращают истину и ложь для тех же данных.

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

Другие вопросы по тегам