私は次のようなテーブルを持っています
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)を返します.先に進むのを手伝ってください.
私は次のようなテーブルを持っています
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)を返します.先に進むのを手伝ってください.
あなたが求めているのは、クエリがすべての値20,23,53に関連付けられているfidを見つけることであり、そうでない場合、そのfidはクエリによって返されないと思います。
SQL には、これに対する 2 つの一般的な解決策があります。
最初に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;
おそらくサブクエリ?
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に対してtrueを返すため、fid = 53およびid = 20,53に対してwhere fid=53 and id in(20,24,53)はfalseです。
唯一の違いは、id=23 と id=24 についてです。したがって、2つの異なるクエリで実行できます。ただし、同じデータに対して true と false を返す場合があります。
ご質問の内容をもう一度よく考えていただきたいと思います。