Usuário com melhor resposta
Substituição de *= e =* por Left Join e Rigth Join

Pergunta
-
Senhores bom dia,
Estou alterando algumas consultas em minha base que utilizam *= e =*, porém em uma consulta não obtive o mesmo resultado.
FROM TABELA D, TABELA C, TABELA P, TABELA V WHERE C.CODIGO *= D.CODIGO AND P.CODIGO = C.CODIGO AND P.CODIGO = V.CODIGO
Resultado: 27 linhas
Alterei o código acima para a nova sintaxe.
FROM TABELA C LEFT JOIN TABELA D ON D.CODIGO = C.CODIGO INNER JOIN TABELA P ON P.CODIGO = C.CODIGO INNER JOIN TABELA V ON V.CODIGO = P.CODIGO<br/>
Ou ..
FROM TABELA D RIGHT JOIN TABELA C ON C.CODIGO = D.CODIGO INNER JOIN TABELA P ON P.CODIGO = C.CODIGO INNER JOIN TABELA V ON V.CODIGO = P.CODIGO
Ouvi algumas vezes falar que *= e =* trazem informações indevidas, porém gostaria da opinião e ajuda de vocês, possa ser que eu esteja cometendo alguma falha
Serviu como Resposta ? Marque por favor.- Editado Rafael O. Pinheiro quarta-feira, 21 de outubro de 2009 12:48 Inserção de Código
Respostas
-
Senhores,
Verifiquei um artigo do Gustavo Maia que resolveu minhas dúvidas.
Segue o link:
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!422.entry
Parabens pelo Artigo Gustavo.
Serviu como Resposta ? Marque por favor.- Marcado como Resposta Rafael O. Pinheiro quarta-feira, 21 de outubro de 2009 13:55
Todas as Respostas
-
-
-
Senhores,
O plano de execução de um comando muda do Level 70 para o Level 80 ?
Segue abaixo exemplo:
CREATE TABLE #TABLE_A( CODIGO INT, NOME VARCHAR(30), DATA SMALLDATETIME) -- Como se fosse minha View CREATE TABLE #TABLE_B(CODIGO INT, NOME VARCHAR(30)) GO INSERT INTO #TABLE_B VALUES(1, 'Nome 1') INSERT INTO #TABLE_B VALUES(2, 'Nome 2') INSERT INTO #TABLE_B VALUES(3, 'Nome 3') INSERT INTO #TABLE_B VALUES(4, 'Nome 4') INSERT INTO #TABLE_B VALUES(5, 'Nome 5') GO -- Retorna 5 informações SELECT * FROM #TABLE_A A, #TABLE_B B WHERE B.CODIGO *= A.CODIGO AND A.DATA = '20091021' -- Não tenho informações SELECT * FROM #TABLE_A A RIGHT JOIN #TABLE_B B ON B.CODIGO = A.CODIGO WHERE A.DATA = '20091021' -- Não tenho informações SELECT * FROM (SELECT A.CODIGO AS CODI_A, A.NOME AS NOME_A, DATA, B.CODIGO AS CODI_B, B.NOME AS NOME_B FROM #TABLE_A A RIGHT JOIN #TABLE_B B ON B.CODIGO = A.CODIGO) A WHERE A.DATA = '20091021' -- Retorna 5 informações SELECT * FROM (SELECT * FROM #TABLE_A WHERE DATA = '20091021') A RIGHT JOIN #TABLE_B B ON B.CODIGO = A.CODIGO
Serviu como Resposta ? Marque por favor. -
Senhores,
Verifiquei um artigo do Gustavo Maia que resolveu minhas dúvidas.
Segue o link:
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!422.entry
Parabens pelo Artigo Gustavo.
Serviu como Resposta ? Marque por favor.- Marcado como Resposta Rafael O. Pinheiro quarta-feira, 21 de outubro de 2009 13:55
-
Olá Rafael,
Puxa que bom ver esse elogio. Escrevo muitos artigos, mas não tenho tantos feedbacks assim.
É muito bom ver que o artigo o ajudou.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comHash Indexes – Uma implementação no SQL Server – Parte I
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!750.entry
Classifique as respostas. O seu feedback é imprescindível