2013-07-31 2 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 

내 문제 : 나는이 마지막을 제거해야 재고가 0 인 제품 코드 "CXDVDNORMBL"이있는 행

어떻게해야합니까?

Ty

+1

'AND dbo.sa.stock> 0'을 (를) 추가해도 문제가 해결되지 않습니까? –

+0

중복 된 ** 모든 ** 또는'주식 '이 0 인 ** 만 제거 하시겠습니까? –

+0

'.REF = 'CXDVDNORMBL ''를 사용하여'dbo.SA'에 3 개의 행이 있기 때문에 이것을 얻었습니다. 왜 그들을 제거하고 싶다면 그들을 가지고 있습니까? –

답변

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 = WHERE = 0을 추가하는 다른 쿼리를 실행하면됩니까?

물론 이러한 행을 완전히 삭제하는 것이 좋습니다. 나중에 정보가 필요할 수도 있습니다. 예를 들어 고객에게 전자 메일을 보내 일부 주문 항목에 주문 항목을 포함 할 수 없다거나 고객이 주문한 내용을 기록하는 경우 (필요한 경우에도 매우 관련성 높은 정보가 될 수 있습니다. 그것은 결코 배달되지 않았다). 따라서 선택을 할 때마다 0 행으로 모든 행을 필터링하는 것이 더 나을 수도 있습니다. 또는, 어떤 이유로 든 행을 orders 테이블에서 실제로 제거하려는 경우, outOfStock이라는 다른 테이블에이 테이블을 링크 된 주문 ID와 함께 넣으십시오.