面对加入表格

时间:2015-01-21 17:59:01

标签: sql

有五个表

  • Items(ItemNo,productName)
  • ProductBatch(productBatchId,ItemNo,batchName,purchaseRate)
  • DamageStock(AdjustmentId,date,description)
  • DamageStockItem(damageStockDetailsId,AdjustmentId,productBatchId)
  • StockPosting(serialNumber,productBatchId,outwardQuantity,voucherType)。

我的目标是通过此查询从上表中检索每个损坏库存项目的所有信息:

select  
    P1.ItemNo, B1.productBatchId, S1.serialNumber, 
    P1.productName, S1.outwardQuantity, DS.damageStockDetailsId
FROM         
    Items AS P1 
INNER JOIN    
    ProductBatch AS B1 ON P1.ItemNo = B1.ItemNo
INNER JOIN   
    StockPosting AS S1 ON B1.productBatchId = S1.productBatchId
INNER JOIN   
    DamageStockItem as DS on DS.productBatchId = B1.productBatchId
INNER JOIN   
    DamageStock AS MASTER1 ON MASTER1 .AdjustmentId = DS.ItemAdjustmentId
WHERE 
    S1.voucherType = 'Damage Stock' 
    AND DS.ItemAdjustmentId = '10001'

但它显示damageStockDetailsId的重复值,这是DamageStockItem表的主键,我不知道这些表之间的关系是否存在任何问题,或者我也解决了这个问题当我在StockPosting表和DamageStock之间建立关系时出现问题,我将StockPosting表的主键作为外键放在DamageStockItem中,并且没有显示任何重复值。我想知道这种关系是正确的还是没有。我需要你关于这个问题的想法。

1 个答案:

答案 0 :(得分:0)

你的表DamageLogItem(或DamageStockDetails,无论它叫什么),你可以在每个AdjustmentId上有几个damageStockDetailsId。

由于那些连接到AdjustmentId,你也应输出它,以查看(看似相同)damageStockDetailsIds所属的位置。