如何链接这些表?

时间:2014-05-14 20:42:22

标签: sql join

好的,我有3组这样的数据:

现在我想检索有关每对的信息

  1. 产品 - 仓库(我有1000条记录)
  2. 仓库 - TransferNumber
  3. 产品 - TransferNumber - 数量
  4. 我期待的最终结果是产品 - 仓库 - 数量。

    它设计奇特,但我想从产品仓库中提取所有记录以获取数量。

    因为我想抓住ProductWarehouse中的所有东西,我试图离开外连接,它应该返回1000条记录,但实际上它给了我1500?为什么它会给我更多记录?

2 个答案:

答案 0 :(得分:0)

尝试将外部联接切换到内部联接。 外连接将匹配NULL值,因此如果Warehouse中的条目与Product不匹配,则会返回所有产品信息为NULL的附加行

(最佳猜测没有提供更具体的表格信息)

答案 1 :(得分:0)

假设模式看起来像

create table Product
(
  product_id int not null ,
  ...
  primary key ( product_id ) ,
)
create table Warehouse
(
  warehouse_id int not null ,
  ...
  primary key ( warehouse_id ) ,
)
create table ProductWarehouse
(
  product_id   int not null ,
  warehouse_id int not null ,

  primary key ( product_id   , warehouse_id ) ,
  foreign key ( product_id   ) references Product(   product_id   ) ,
  foreign key ( warehouse_id ) references Warehouse( warehouse_id ) 

)
create table WarehouseTransferNumber
(
  transfer_number int not null ,
  warehouse_id    int not null ,
  ...
  primary key ( transfer_number ) ,
  foreign key ( warehouse_id ) references Warehouse( warehouse_id ) ,
)
create table ProductTransferNumber
(
  product_id      int not null ,
  transfer_number int not null ,
  quantity int not null ,
  ...
  primary key ( product_id , transfer_number ) ,
  foreign key ( product_id ) references Product( product_id ) ,
  foreign key ( transfer_number ) references WarehouseTransferNumber ( transfer_number ) ,
)

你应该能够说出类似

的内容
select pw.product_id   ,
       pw.warehouse_id ,
       sum(ptn.quantity)
from ProductWarehouse        pw
join WarehouseTransferNumber wtn on wtn.warehouse_id = pw.warehouse_id
join ProductTransferNumber   ptn on ptn.product_id   = pw.product_id
group by pw.product_id ,
         pw.warehouse_id