1

簡単にするために、uid (ユーザー ID) とフルーツの 2 つの列を持つテーブルがあり、ユーザーが好きな種類の果物を記述しているとします。

例えば:

uid | fruit
----|------------
  1 | Strawberry
  1 | Orange
  2 | Strawberry
  2 | Banana
  3 | Watermelon

など。

N 人の特定のユーザーに共通する果物の種類 (つまり、テーブルとそれ自体の N 回の交差) を見つけたい場合、最初のオプションは を使用することINNER JOINです。

SELECT DISTINCT fruit FROM Fruits f1
INNER JOIN Fruits f2 USING (fruit)
INNER JOIN Fruits f3 USING (fruit)
...
INNER JOIN Fruits fN USING (fruit)
WHERE f1.uid = 1 AND f2.uid = 2 ... AND fN.uid = M

しかし、この種の私にはばかげているように見えます。N = 10 の場合はどうなるでしょうか。または20?20回の結合を行うのは賢明ですか? 私が見逃している他の結合操作はありますか?

結合の「魔法」を学ぶ前に、次のように現在のケースに適用される別の方法を使用しました。

SELECT DISTINCT fruit FROM Fruits
WHERE uid IN (1, 2, ..., M)
GROUP BY fruit
HAVING COUNT (*) = N

はるかにコンパクトに見えGROUP BYますが、INNER JOIN.

だから、私の質問は本当に、上記を行うための3番目の方法はあるのでしょうか? はい/いいえの場合、どちらが最も効率的ですか?

- 編集 -

それで、私の質問に似た質問が以前に尋ねられたようです。提供された2つの答えは、実際に私が使用している2つの方法です。

しかし、疑問は残ります。どちらが本当に効率的ですか?たぶん、3番目のものはありますか?

4

0 に答える 0