あなたは初心者ですので、私は、私はあなたにプレタ-à-Porterのクエリを示した場合、それはそれほど役に立たないだろうと思います。代わりに私はあなたの質問が何をしているか教えてくれるでしょう。
変更された結合構文を使用しています。テーブル名の間のコンマを、明示的なキーワードCROSS JOIN
に置き換えることができます。だからあなたのメインのクエリがあります。エージェントからすべてのレコードを取り出し、ポリシーからすべてのレコードとそれらをまとめると、結果の行を取得し、すべてのそれらを組み合わせる:
FROM Agent CROSS JOIN Policy CROSS JOIN PolicyCover
に変換し、意味
FROM Agent, Policy, PolicyCover
をPolicyCoverに記録する。エージェントは100レコード、Policy 200、PolicyCover 300を持っているとします。これにより、100 x 200 x 300の組み合わせ= 6,000,000行になります。 WHERE
句に今
:
WHERE (Select sum(Salary+Commission) From Agent) <
(Select Min(Salary) From Agent Where Function = "Manager")
ですから、エージェントからの給与プラスcommisonの合計を選択します。次に、エージェントからの最低給与を選択します。これはもちろん、すべての給与の合計(手数料に加えて)より少なくなります。したがって、条件は決して満たされません。レコードを選択しません。
条件が満たされたWHERE
句があった場合は、組み合わせた行の無数からプレミアム値の合計を加えた列を選択します。そのサブクエリを見てみましょう:あなたはPolicyとPolicyCoverを結合し、すべての組み合わせを作成します。 WHERE
では、Policyテーブルから取得したAgentNoがポリシーテーブルに存在することを確認します。まあ、これはもちろん常に当てはまります。
最初のこと:適切な結合を学習してください(INNER JOIN ... ON ...
から始まる)。テーブルと関連するものについて考え、関連するレコード(たとえば、同じポリシー番号のもの)にのみ参加してください。
次のこと:複数のテーブルで作業する場合は、列を修飾することを習慣にしてください。プレミアムは、たとえばPolicyまたはPolicyCoverの列ですか?テーブル名:SUM(PolicyCover.Premium)
を指定して、これを明確にします。または、表の別名:FROM PolicyCover pc
とSUM(pc.Premium)
を使用します。
これらのdbテーブルの構造を投稿してください – gaganshera
先頭にカンマ区切りの結合を使用しないでください。あなたは初心者のようですので、** 1992年**に重複して作成された結合構文を使用するよう教えてくれましたか?次に、同じテーブルから何度も何度も選択しています。サブクエリはメインクエリにも関連していません。 –
テーブル構造の表示を求められました。これをしてください。どの列がどのテーブルに属していますか?テーブルの主キーは何ですか? (ちなみに:MS Accessタグを追加してください。私は編集が保留中ではありません。あなたのDBMSにタグを付けないでSQLの質問をしないでください) –