2016-12-02 180 views
0

當我執行此:SQL Server的左連接問題

SELECT i.descricao, 
     sii.quantidade   quantidade_inicial, 
     sii.quantidade * i.valor valor_inicial 
FROM itensvalor i 
     LEFT JOIN saldoinicialprodutositens sii 
       ON i.id = sii.iditemvalor 
       AND Isnull(sii.datahoraexclusao, '') = '' 
WHERE sii.idSaldoInicialProduto IN (SELECT id FROM saldoInicialProdutos WHERE idmovimentodiario = 76) 

它返回:

enter image description here

當我執行此:

SELECT i.descricao, 
     sfi.quantidade   quantidade_final, 
     sfi.quantidade * i.valor valor_final 
FROM itensvalor i 
     LEFT JOIN saldofinalprodutositens sfi 
       ON i.id = sfi.iditemvalor 
       AND Isnull(sfi.datahoraexclusao, '') = '' 
WHERE sfi.idSaldoFinalProduto IN (SELECT id FROM saldoFinalProdutos WHERE idmovimentodiario = 76) 

它返回: (與R $ 100,00)

enter image description here

但是,最後,當我嘗試加入2個表格時,不會出現指向R $ 100,00的值。

我想使用此查詢加盟:

SELECT i.descricao, 
     sii.quantidade   quantidade_inicial, 
     sii.quantidade * i.valor valor_inicial, 
     sfi.quantidade   quantidade_final, 
     sfi.quantidade * i.valor valor_final 
FROM itensvalor i 
     LEFT JOIN saldofinalprodutositens sfi 
       ON i.id = sfi.iditemvalor 
       AND Isnull(sfi.datahoraexclusao, '') = '' 
     LEFT JOIN saldoinicialprodutositens sii 
       ON i.id = sii.iditemvalor 
       AND Isnull(sii.datahoraexclusao, '') = '' 
WHERE sii.idSaldoInicialProduto IN (SELECT id FROM saldoInicialProdutos WHERE idmovimentodiario = 76) 
AND sfi.idSaldoFinalProduto IN (SELECT id FROM saldoFinalProdutos WHERE idmovimentodiario = 76) 

enter image description here

回答

4

您需要將您的WHERE ON子句中對於工作:

SELECT i.descricao, 
     sii.quantidade   quantidade_inicial, 
     sii.quantidade * i.valor valor_inicial, 
     sfi.quantidade   quantidade_final, 
     sfi.quantidade * i.valor valor_final 
FROM itensvalor i 
     LEFT JOIN saldofinalprodutositens sfi 
       ON i.id = sfi.iditemvalor 
       AND Isnull(sfi.datahoraexclusao, '') = '' 
       and sfi.idSaldoFinalProduto IN (SELECT id FROM saldoFinalProdutos WHERE idmovimentodiario = 76) 
     LEFT JOIN saldoinicialprodutositens sii 
       ON i.id = sii.iditemvalor 
       AND Isnull(sii.datahoraexclusao, '') = '' 
       and sii.idSaldoInicialProduto IN (SELECT id FROM saldoInicialProdutos WHERE idmovimentodiario = 76) 

否則,您的sfi.idSaldoFinalProduto爲空,並且該行被省略。

+0

移動ON caluse內部的WHERE解決了我的問題。謝謝! –