2014-05-14 60 views
0

好了,所以我有3組數據是這樣的:如何鏈接這些表格?

現在我想檢索每對信息

  1. 產品 - 倉庫(我有1000條記錄)
  2. 倉庫 - TransferNumber
  3. 產品 - 轉移編號 - 數量

我期待的最終結果是產品 - 倉庫 - 數量。

這是奇怪的設計,但我想從產品倉庫拉取所有記錄來獲取數量。

正如我想抓住一切在ProductWarehouse中,我試圖離開外部聯接,它應該返回1000條記錄,但實際上它給了我1500?爲什麼它給了我更多的記錄?

+0

表的設計我我不喜歡。試着理解你的數據模型,以及何時插入Product-TransferNumber-Quantity。它最有可能與產品有一對多的關係(有多個產品記錄)。問題中缺少一些關鍵細節,這使得回答困難。 – Nivas

+2

你沒有向我們展示你的模式,你採取的方法。你也沒有給我們一個明確的問題陳述,或樣本數據和預期結果。沒有一些澄清,要幫助你是相當困難的。 –

回答

0

嘗試將您的外連接切換到內連接。 外連接將匹配NULL值,所以如果你有在倉庫的條目不匹配的產品的附加導線將返回所有的產品信息是NULL

(提供沒有更具體的表信息的最佳答案)

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