1

実行時にパフォーマンスを最適化する必要があるクエリを作成したいと思います。以下は私のテーブル構造です:-

テーブル名:-インベントリ

テーブル構造:-

item_id int(50) Primary key,
item_name varchar(50),
matchingItemID int(50).

上記の表から、一致するアイテムのペアを見つけたいと思います。つまり、AとBがそれぞれitem_id 1と2の2つのアイテムである場合、matchingItemIDという名前のフィールドの値はそれぞれ2と1でなければなりません。

matchItemIDは、追加されたアイテムのitem_idです。

例えば

item_id     item_name      matchingItemID
   1            A                2
   2            B                1

したがって、構築されたクエリは次のように出力を返す必要があります。-

A-B。

1つのクエリを試しましたが、実行に時間がかかるため、パフォーマンスが最適化されていないと思います。

以下は私が作成したクエリです:-

SELECT a.item_id, b.item_id
FROM inventory a, inventory b
WHERE a.matchingItemID = b.item_id
AND b.matchingItemID = a.item_id
AND a.item_id != b.item_id;
4

2 に答える 2

0

アイテムが常に相互に一致する場合は、次のことができます。

SELECT a.item_id, b.item_id
FROM inventory a
JOIN inventory b ON a.matchingItemID = b.item_id

また、matchingItemID列にインデックスを追加することもできます。

編集

冗長なようですが、これはあなたが求めたものです:

SELECT a.item_id, b.item_id
FROM inventory a
JOIN inventory b ON a.matchingItemID = b.item_id AND b.matchingItemID = a.item_id
于 2012-12-29T08:38:18.000 に答える
0

A=B2 つのレコードを持つ必要がなく、このクエリを使用するだけの場合、2 つのペアではなく、B=A1 つのペアのみが出力されます。A=B

SELECT a.item_id id1, b.item_id id2
FROM inventory a
join inventory b on 
    (a.matchingItemID = b.item_id)
    AND 
    (b.matchingItemID = a.item_id)
    AND 
    (a.item_id < b.item_id)
于 2012-12-29T08:54:11.037 に答える