1

私は次のようなテーブルを持っています

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)を返します.先に進むのを手伝ってください.

4

3 に答える 3

3

あなたが求めているのは、クエリがすべての値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;
于 2010-07-26T05:42:22.117 に答える
0

おそらくサブクエリ?

SELECT id, fid FROM table
WHERE fid = 53 AND
id IN ( SELECT id FROM table WHERE id IN(20,24,53))
于 2010-07-26T05:40:02.607 に答える
0

あなたの例の条件によると、単一のクエリでは不可能です:(。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 を返す場合があります。

ご質問の内容をもう一度よく考えていただきたいと思います。

于 2010-07-26T05:45:45.557 に答える