2

私は1つのSQLクエリを見ました。

SELECT B.SubscriptionID
FROM 
 tblA A1
inner JOIN  tblA A2 ON A1.AcctServiceID = A2.AcctServiceID  
INNER JOIN  tblB B ON A2.ServiceID = B.ServiceID
INNER JOIN  tblC C ON B.SubscriptionID = C.SubscriptionID 
WHERE
    A1.ServiceID = 1302
AND (C.Type LIKE '%O%' OR C.Type LIKE '%A%')

誰もがの使用は何であるかを説明できますか

 tblA A1
    inner JOIN  tblA A2 ON A1.AcctServiceID = A2.AcctServiceID

上記のクエリを最適化できますか?上記のクエリを最適化する方法を教えてください。

助けてください...ありがとう。

4

2 に答える 2

2

テーブルをそれ自体に結合し直したいと思う理由はたくさんあります...しかし、ここではわかりません。通常、少なくとも2つの結合条件、ある種の不等式を探す結合条件、またはテーブル内の0個または複数のレコードに一致する結合条件(結果の数を増やすまたは制限するため)が必要です。

ここにはそのようなものは見当たりません。この場合、結合を削除し、代わりにA1を使用するようにA2へのすべての参照を更新できるようです。これは完全なクエリですか?

ここで私が考えることができる最も近いことは、AcctServiceIDフィールドにNULLが含まれるレコードを除外するためにこれを行っていることです(NULLはそれ自体と等しくないため)が、これが機能する場合でも、これを試すのは奇妙な方法です。

于 2012-09-17T17:12:41.610 に答える
0
 inner JOIN  tblA A2 ON A1.AcctServiceID = A2.AcctServiceID

この行は、tblAをA1として、tblAをA2として結合し、A1としてのtblAからのAcctServiceIDがA2としてのtblAからのAcctServiceIDと同じである場合に行を表示することを意味します。このクエリを最適化する方法は、この行を削除することです。なんでも。AcctServiceIDは、同じフィールドであるため、AcctSerivceIDと同じになります。

于 2012-09-17T17:10:02.033 に答える