Usuário com melhor resposta
LEFT JOIN com OR

Pergunta
-
Pessoal,
Estou fazendo um relacionamento entre tabelas, tabela A e tabela B.
Quando não existe o registro na TABELA B está retornando o valor NULL (dos valores da tabela B) pois estou utilizando o LEFT JOIN.Mas eu gostaria de fazer algo assim: Se não existir os valores na TABELA B procurar na TABELA C.
Sempre haverá os valores na TABELA C.
Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
Respostas
-
Bom de qualquer forma.. veja este exemplo abaixo
CREATE TABLE Teste1 (cd_cadastro int, nome varchar(20), cd_tipo int) go CREATE TABLE Teste2 (cd_tipo int, nome varchar(20)) go CREATE TABLE Teste3 (cd_tipo int, nome varchar(20)) go INSERT INTO TESTE1 VALUES (1,'TESTE 1 ', 1) INSERT INTO TESTE1 VALUES (2,'TESTE 2 ', 2) INSERT INTO TESTE2 VALUES (1,'TIPO 1') INSERT INTO TESTE3 VALUES (1,'TIPO TESTE3 1') INSERT INTO TESTE3 VALUES (2,'TIPO TESTE3 2')
depois vc faz assim com o select
SELECT A.CD_CADASTRO, A.NOME, CASE WHEN B.NOME IS NULL THEN C.NOME ELSE B.NOME END AS NOME_TIPO FROM TESTE1 A LEFT OUTER JOIN TESTE2 B ON A.CD_TIPO = B.CD_TIPO LEFT OUTER JOIN TESTE3 C ON C.CD_TIPO = A.CD_TIPO
Se vc não quiser relacionar a tabela, faz assim:
SELECT A.CD_CADASTRO, A.NOME, CASE WHEN B.NOME IS NULL THEN (select nome from TESTE3 where cd_tipo = A.cd_tipo) ELSE B.NOME END AS NOME_TIPO FROM TESTE1 A LEFT OUTER JOIN TESTE2 B ON A.CD_TIPO = B.CD_TIPO
só cuidado com performance
Isco Sistemas José Luiz Borges
- Editado Jose Luiz Borges segunda-feira, 5 de março de 2012 19:15
- Sugerido como Resposta David Silva terça-feira, 6 de março de 2012 00:33
- Marcado como Resposta Eder Costa quinta-feira, 8 de março de 2012 13:44
Todas as Respostas
-
-
Bom de qualquer forma.. veja este exemplo abaixo
CREATE TABLE Teste1 (cd_cadastro int, nome varchar(20), cd_tipo int) go CREATE TABLE Teste2 (cd_tipo int, nome varchar(20)) go CREATE TABLE Teste3 (cd_tipo int, nome varchar(20)) go INSERT INTO TESTE1 VALUES (1,'TESTE 1 ', 1) INSERT INTO TESTE1 VALUES (2,'TESTE 2 ', 2) INSERT INTO TESTE2 VALUES (1,'TIPO 1') INSERT INTO TESTE3 VALUES (1,'TIPO TESTE3 1') INSERT INTO TESTE3 VALUES (2,'TIPO TESTE3 2')
depois vc faz assim com o select
SELECT A.CD_CADASTRO, A.NOME, CASE WHEN B.NOME IS NULL THEN C.NOME ELSE B.NOME END AS NOME_TIPO FROM TESTE1 A LEFT OUTER JOIN TESTE2 B ON A.CD_TIPO = B.CD_TIPO LEFT OUTER JOIN TESTE3 C ON C.CD_TIPO = A.CD_TIPO
Se vc não quiser relacionar a tabela, faz assim:
SELECT A.CD_CADASTRO, A.NOME, CASE WHEN B.NOME IS NULL THEN (select nome from TESTE3 where cd_tipo = A.cd_tipo) ELSE B.NOME END AS NOME_TIPO FROM TESTE1 A LEFT OUTER JOIN TESTE2 B ON A.CD_TIPO = B.CD_TIPO
só cuidado com performance
Isco Sistemas José Luiz Borges
- Editado Jose Luiz Borges segunda-feira, 5 de março de 2012 19:15
- Sugerido como Resposta David Silva terça-feira, 6 de março de 2012 00:33
- Marcado como Resposta Eder Costa quinta-feira, 8 de março de 2012 13:44