2016-12-02 3 views
0

Когда я выполняю это:SQL Server Left заспорить

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 равен NULL, а строка опускается.

+0

Перемещение ГДЕ внутри КАЛИУСА РЕШЕНСТВУЕТ мою проблему. Благодаря! –

Смежные вопросы