SQL查询(内部联接和重复结果)

时间:2013-07-31 23:01:47

标签: mysql sql

我对SQL完全不熟悉,只是通过提出一些可以帮助我的查询来加快我的工作。

我的示例代码(我将查询限制为一个订单,以显示问题):

SELECT dbo.BI.nmdos, dbo.BI.OBRANO, dbo.bi.ref
, dbo.BI.design, dbo.BI.LOBS, dbo.BI.qtt, dbo.sa.stock
FROM dbo.BI
LEFT JOIN dbo.SA on dbo.SA.REF=dbo.BI.REF
WHERE dbo.BI.FECHADA=0 AND dbo.BI.LOBS <> 'S' 
AND dbo.BI.QTT >= 1 AND dbo.BI.nmdos = 'Encomenda Cliente' 
AND dbo.BI.obrano = 2496

我的结果:

Encomenda Cliente   2496                        rty     5.0000  NULL
Encomenda Cliente   2496    01103402            TONER OKI P/B4000       1.0000  0.000
Encomenda Cliente   2496    PC                  PORTES - COMPRAS        2.0000  1429.000
Encomenda Cliente   2496    CXDVDNORMBL         CAIXA DE DVD NORMAL PRETO FOSCO - 14MM (100)        10.0000 4.000
Encomenda Cliente   2496    CXDVDNORMBL         CAIXA DE DVD NORMAL PRETO FOSCO - 14MM (100)        10.0000 0.000
Encomenda Cliente   2496    CXDVDNORMBL         CAIXA DE DVD NORMAL PRETO FOSCO - 14MM (100)        10.0000 0.000

我的问题: 我需要使用库存= 0的产品代码“CXDVDNORMBL”删除最后两行。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您需要添加dbo.SA.stock&gt; 0到您的加入条件。这样它只会加入来自SA的有一些库存的行。

SELECT dbo.BI.nmdos, dbo.BI.OBRANO, dbo.bi.ref, dbo.BI.design, dbo.BI.LOBS, dbo.BI.qtt, dbo.sa.stock
FROM dbo.BI
LEFT JOIN dbo.SA on dbo.SA.REF=dbo.BI.REF AND dbo.SA.stock > 0
WHERE dbo.BI.FECHADA=0 AND dbo.BI.LOBS<>'S' AND dbo.BI.QTT>=1 AND dbo.BI.nmdos='Encomenda Cliente' AND dbo.BI.obrano=2496

答案 1 :(得分:0)

您的意思是在这些产品缺货时要从订单中删除行吗?只需运行另一个查询,删除之前选择的相同内容,但添加WHERE stock = 0?

不确定完全删除这些行是明智的。您可能稍后需要该信息,例如,如果您要向客户发送电子邮件,说某些商品无法包含在订单中,或者只是记录客户订购的商品(即使是相关信息仍然是非常相关的信息)它从未交付过)。因此,我认为只要你选择它就过滤掉0股票的任何行可能会更好。或者,如果您出于某种原因确实想要将这些行排除在订单表之外,请将它们放在名为outOfStock的另一个表中,并将订单ID链接到该表。