2013-07-31 51 views
0

我完全不熟悉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 

我的問題: 我需要刪除的最後2具有庫存= 0的產品代碼「CXDVDNORMBL」的行。

我該怎麼辦?

Ty

+1

並添加'AND dbo.sa.stock> 0'不適合你? –

+0

你想刪除**任何**重複或只有那些零庫存? –

+0

你得到這個是因爲你在'dbo.SA'中有三行'.REF ='CXDVDNORMBL''。如果你想刪除它們,爲什麼你有他們? –

回答

1

您需要將dbo.SA.stock> 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 
0

您的意思是說,當這些產品缺貨時,您想從訂單中刪除行嗎?只需運行另一個刪除與之前選擇的相同內容的查詢,但添加WHERE stock = 0?

不知道這是明智的,但完全刪除這些行。稍後您可能需要這些信息,例如,如果您要發送電子郵件給客戶,說明某些商品不能包含在訂單中,或者僅記錄客戶訂購的商品(即使它從未交付)。因此,我認爲只要選擇它就可以過濾掉任何有0個股票的行。或者,如果您確實希望由於某種原因將這些行排除在訂單表之外,請將其放入另一個名爲outOfStock的表中,並將訂單ID鏈接到該表。