Inquiridor
Update em uma tabela utilizando filtros de outra

Pergunta
-
Bom dia pessoal!
Sou leigo com relação ao SQL, mas estou iniciando alguns trabalhos e surgiu uma dúvida...
Tenho que fazer um update em uma tabela (TABELA1), porém para realizar este update quero fazer um filtro por data, mas este campo não existe nesta tabela. Tenho uma segunda tabela (TABELA2), que possui pontos de relacionamento com a TABELA1. É possivel fazer este update utilizano a função INNER JOIN filtrando os dados da TABELA1 juntamente com o campo data da TABELA2?
Obrigado.
terça-feira, 8 de maio de 2012 12:03
Todas as Respostas
-
Bom dia Ericke,
Tem como fazer isto sim, veja se o exemplo abaixo te ajuda.
-- Tabelas CREATE TABLE TABELA1( ID INT, INFO VARCHAR(10)); CREATE TABLE TABELA2( ID INT, DATA DATE, INFO VARCHAR(10)); -- Inserindo dados nas tabelas INSERT INTO TABELA1 VALUES(1,'Teste'); INSERT INTO TABELA1 VALUES(2,'Teste2'); INSERT INTO TABELA2 VALUES(2,'2012-05-01','Teste2'); INSERT INTO TABELA2 VALUES(2,'2012-07-01','Teste2'); INSERT INTO TABELA2 VALUES(4,'2012-06-01','Teste2'); -- UPDATE UPDATE TABELA1 SET INFO = 'ALTERADA' FROM TABELA1 T1 INNER JOIN TABELA2 T2 ON T1.ID = T2.ID WHERE T2.DATA = '2012-07-01'; -- Resultado SELECT * FROM TABELA1 /* -- Dropando as tabelas DROP TABLE TABELA1 DROP TABLE TABELA2 */
Adriano Nascimento
terça-feira, 8 de maio de 2012 12:19 -
Bom dia Adriano!
Muito obrigado pelo retorno, mas como mencionei, sou leigo no assunto, então ficou uma dúvida: Como ja possuo as tabelas no sistema não preciso fazer esta criação e inserção de dados, certo?
Pulei diretamente para a parte do UPDATE, e montei da seguinte forma:
UPDATE E660INC SET CSTPIS=50
FROM
E660INC INNER JOIN E440NFC ON E440NFC.NUMNFC=E660INC.NUMNFI
WHERE E440NFC.DATENT >= '01/03/2012'
Desta forma está retornando o seguinte erro: comando SQL não encerrado adequadamente.
Estou fazendo algo errado?
Obrigado.
terça-feira, 8 de maio de 2012 12:59 -
Acho que faltou especificar qual a tabela que CSTPIS pertence:
UPDATE E660INC SET E660INC.CSTPIS=50 FROM E660INC
INNER JOIN E440NFC ON E440NFC.NUMNFC=E660INC.NUMNFI WHERE E440NFC.DATENT >= '01/03/2012'
Abraços!
thiagokoelho
terça-feira, 8 de maio de 2012 13:09 -
Acho que faltou especificar qual a tabela que CSTPIS pertence:
UPDATE E660INC SET E660INC.CSTPIS=50 FROM E660INC
INNER JOIN E440NFC ON E440NFC.NUMNFC=E660INC.NUMNFI WHERE E440NFC.DATENT >= '01/03/2012'
Abraços!
thiagokoelho
Especifiquei a tabela de CSTPIS, conforme acima, porém o comando ainda apresenta o mesmo erro.
terça-feira, 8 de maio de 2012 13:15 -
Ericke,
O seu comando esta correto.
Mas qual a sua versão do Sql Server?
Adriano Nascimento
terça-feira, 8 de maio de 2012 13:47 -
Hum.. acho que aí está o problema.. eu to postando a questão em lugar errado...
O meu banco de dados na verdade é oracle... e eu estou com problema no comando SQL..
Se mesmo assim puder me ajudar, agradeço!!
e peço desculpas pela mancada.. realmente não tinha visto que o forum era sobre o SQL Server apenas..
terça-feira, 8 de maio de 2012 13:52 -
Esse erro é de Oracle
thiagokoelho
terça-feira, 8 de maio de 2012 14:11 -
No Oracle tem várias formas de fazer isso, por exemplo, você pode usar o MERGE
MERGE INTO
TABELA t1
USING
(SELECT *
FROM TABELA2
WHERE ) t2
ON (t1.NOME = t2.NOME)
WHEN MATCHED THEN
UPDATE SET t1.IDENT = t2.IDENT;ou usar um UPDATE em cima de uma sub-query, assim:
UPDATE (select TABELA1 SET INFO = 'ALTERADA'
FROM TABELA1 T1 INNER JOIN TABELA2 T2 ON T1.ID = T2.ID
WHERE T2.DATA = '2012-07-01') VW
SET INFO = 'ALTERADA';
MCSD Charter Member (since 1995), MCSE+I, MCDBA, MCNPS, MCP+SB, MCTS, MCBSS/MCBSP: Dynamics CRM, MCT
- Sugerido como Resposta Sérgio Pinheiro, DevOps and Analytics Expert quarta-feira, 9 de maio de 2012 16:33
quarta-feira, 9 de maio de 2012 16:32