Sql代码显示答案2次

时间:2014-04-24 20:23:47

标签: sql

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行相同)实际答案只有两行。为什么我会这样?

请帮助我知道。

有两个表,tblpurchaseorderpodetails。我只需要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

4 个答案:

答案 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';