SQLPLUS表查询麻烦

时间:2012-11-29 08:11:35

标签: sqlplus

我在SQLPLUS中遇到了一个问题。

我被要求为满足以下约束条件的所有供应商显示SuppCode,SuppName和PostCode:他们提供的每个库存商品的价格都高于所有库存商品的平均价格。

我正在使用的三张桌子是; Supppliers and Stocks和SupplyItems。

供应商表看起来像:

SUPPCODE SUPPNAME STREET TOWN COUNTRY POSTCODE TELNO FAXNO

有8个单独的样本数据(8个供应商),没有空字段。

Stocks表格如下:

ITEMNO STORECODE ITEMDESC QUANTITY UNITS REORDER PRICE SUPPCODE

使用40个单独的样本数据(40个库存项目),并且没有空字段。

SupplyItems表如下所示:

SUPPCODE CATNO STOCKNO PRICE

使用60个单独的样本数据(60个供应项目),并且没有空字段。

我写了以下查询:

select distinct SU.SuppCode, Su.SuppName, PostCode
from Suppliers SU
LEFT JOIN SupplyItems SI ON SU.SuppCode = SI.SuppCode
where Price >
(select AVG(Quantity) from Stocks ST
where SI.StockNo = ST.StockNo);

我得到以下输出(4个值):

SUPPCODE SUPPNAME POSTCODE
S6       BSS LTD. B10 8SS
S2       ITX LTD. IT5 3TX
S3       FFG LTD. FY9 6FG
S4       OMM LTD. OM5 4MM

现在,我已经知道输出应该包含2或3条记录,所以我的查询是错误的,虽然我看不出原因。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

此:

where Price >
(select AVG(Quantity) from Stocks ST

看起来不对 - 不应该是

AVG(price)

编辑:也是,

select distinct SU.SuppCode, Su.SuppName, PostCode
from Suppliers SU
LEFT JOIN SupplyItems SI ON SU.SuppCode = SI.SuppCode
where Price > ...

可能不会做你想要的 - 这将返回所有提供至少一个项目的供应商,其价格高于平均水平;要获得仅提供 项目且价格高于平均值的供应商,您必须使用不同的方法,例如(另)

select distinct SU.SuppCode, Su.SuppName, PostCode
from Suppliers SU
where not exists (
  select null from SupplyItems si 
  where su.SuppCode = si.SuppCode
  and su.price <= (
      select AVG(price) from Stocks ST
      where SI.StockNo = ST.StockNo)
)