SELECT p.*, po.OrderedQty, po.TotalAmount
FROM tblPurchaseOrder AS p
INNER JOIN PODetails AS po ON p.PONo = po.PONo
WHERE po.PONo = '1';
我有2行显示此代码,当我运行它时,它返回4行,2个原始和2个重复(与前2行相同)实际答案只有两行。为什么我会这样?
请帮助我知道。
有两个表,tblpurchaseorder
和podetails
。我只需要podetails
表中的一行。但令人困惑的是它为什么只显示4行,返回。
4 1 1 2014-04-24 2014-04-24 Whole Sale Price 1 Nokia001 0 0 0 190 570 3 918
5 1 1 2014-04-24 2014-04-24 Whole Sale Price 1 item 1 0 0 0 87 348 3 918
4 1 1 2014-04-24 2014-04-24 Whole Sale Price 1 Nokia001 0 0 0 190 570 4 918
5 1 1 2014-04-24 2014-04-24 Whole Sale Price 1 item 1 0 0
0 87 348 4 918
tblpurchaseorder
POID PONo POReference CreatedDate DeliveryDate PaymentMethod SupplierID ItemCode IsCommit IsPending IsDelete SubTotal TotalValue
4 1 1 2014-04-24 2014-04-24 Whole Sale Price 1 Nokia001 0 0 0 190 570
5 1 1 2014-04-24 2014-04-24 Whole Sale Price 1 item 1 0 0 0 87 348
tbl podetails
PODId PONo OrderedQty SupplierID TotalAmount PriceLevel PaidAmount
3 1 3 1 918 Whole Sale Price 900
4 1 4 1 918 Whole Sale Price 900
答案 0 :(得分:0)
您需要具有必须唯一的列或列组合才能识别所需的记录。
结果是正确的......他从订单表中获取第一行并与podetails相关!在这里他获得了2排比赛。然后他从订单中获取第二行并与podetails相同的2行相关,因此他将返回4行。
答案 1 :(得分:-1)
猜猜缺少的单词是SELECT DISTINCT:)
答案 2 :(得分:-1)
便宜的解决方案是在其中添加Select Distinct以仅返回不同的记录(这可能会消除您的重复问题)。然而,这并不总是很好的解决方案。
发布什么记录返回,以及你应该回来什么,我们可以寻找修复它(虽然不同可能现在解决问题)
编辑:查看结果,您有四个不同的记录。它看起来像(假设排序与你的select语句相同),差别是int eh po.OrderedQty column和po.TotalAmount column
由于您在注释中声明运行查询select * from tblPurchaseOrder,并且只得到2个结果,很明显PODetails中的两列是导致其他记录的原因(这对于连接来说是正确的)你有它。)
你所拥有的是tblPurchaseOrder(截断为一列):
Nokia
Item 1
这在PODetails中:
3
4
你得到:
Nokia 3
Item 1 3
Nokia 4
Item 1 4
真正的问题是,您用作加入的POno对于您的所有记录都是1。这使我上面演示的结果发生了,因为每个记录1将等于1。
这两个表之间没有唯一标识所需记录的列。
答案 3 :(得分:-1)
每个PoNo的podetails表中可能有多行。这就是你得到多行的原因。
SELECT *
FROM PODetails po
WHERE po.PONo = '1';
因此,您还需要使用其他列(POID)加入,如下所示:
SELECT p.*, po.OrderedQty, po.TotalAmount
FROM tblPurchaseOrder AS p
INNER JOIN PODetails AS po ON p.PONo = po.PONo AND po.PODID = p.POID
WHERE po.PONo = '1';