2017-12-16 4 views
1

のロジックを理解できません。このクエリは、プロバイダ名を含むサプライヤによる最も高価な記事の名前と価格でリストを選択します。サプライヤごとのmax(price)記事のSQLクエリ。

テーブルだけです:

サプライヤー:コード(PK) - 名前

記事:コード(PK) - 名前 - 価格 - サプライヤー(FK)

そして、クエリは次のとおりです。

SELECT A.NAME, A.PRICE, S.NAME FROM ARTICLES A, SUPPLIERS S 
WHERE A.SUPPLIER = S.CODE 
AND A.PRICE = 
(
SELECT MAX(A.PRICE) 
FROM ARTICLES A 
WHERE A.SUPPLIER = S.CODE 
) 

論理の背後にあることを理解してもらえますか?なぜこれは私に最大供給業者価格を与えるのですか?

ありがとうございました!

+1

私は以下の質問に答えましたが、サンプルデータと期待される結果を提供するためにサンプルデータを提供することができます。 – Alan

答えて

1

内部クエリは、外部クエリから渡されたsupplier.codeと一致する記事のサブセットの最大価格を取得しています。したがって、内側のクエリは、「私にサプライヤXの最高価格を与えてください」と言います。

外側のクエリは、結合されたリストをフィルタリングして内側のクエリの結果に一致するレコード(最高価格と同じもの)を提供するだけです。複数のレコードがサプライヤーの最高価格に等しい場合は、外部リストの複数のレコードと一致します。

+0

ありがとうアラン!私が得ないのは、なぜこの内側のクエリが機能するかです。 – Luis

+0

ああ!それは相関サブクエリと呼ばれています。それらを読んで、重要な武器をあなたの武器に加えます。内部クエリは、サブクラスと同様に、外部クエリのフィールドを認識します。このため、名前空間接頭辞を慎重に指定することが重要です。そうしないと、いくつかの意図しない結合で終わる可能性があります。 – Alan

関連する問題