你是初學者,所以我覺得如果我向你展示一個prêt-à-porter查詢,那麼它就沒有多大的幫助。相反,我會告訴你你的查詢做了什麼。
您正在使用過時的連接語法。您可以用顯式關鍵字CROSS JOIN
替換表名之間的逗號。所以,你的主查詢有:
FROM Agent, Policy, PolicyCover
它轉換爲
FROM Agent CROSS JOIN Policy CROSS JOIN PolicyCover
和手段:從代理抓住每一個記錄,並從政策的每條記錄將它們結合起來,然後把結果行,並與每一個將它們結合起來記錄在PolicyCover中。假設代理有100條記錄,策略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 ...
開始)。考慮與表相關的內容,並只加入相關記錄(例如,使用相同的保單號)。
接下來的事情:在處理多個表格時,使其符合您的列的使用習慣。例如Premium是Policy還是PolicyCover?通過指定表名來明確這一點:SUM(PolicyCover.Premium)
。或者使用表別名:FROM PolicyCover pc
和SUM(pc.Premium)
。
請發佈這些數據庫表的結構 – gaganshera
首先不要使用逗號分隔的連接。你似乎是一個初學者,所以誰教你使用在1992年**中被重複使用的連接語法?然後你一次又一次從相同的表格中選擇。您的子查詢甚至與主查詢沒有關係。 –
您被要求顯示錶格結構。請這樣做。什麼專欄屬於哪個表?什麼是表的主鍵? (順便說一下:請添加MS Access標籤,我不能因爲有待編輯,請不要在沒有標記DBMS的情況下詢問SQL問題。) –