OBTER RESULTADO DO JOIN DE DUAS TABELAS
Boa tarde!
Estou a fazer um inner join de duas tabelas...
Código :
DELIMITER $$
CREATE DEFINER='root'@'localhost' PROCEDURE 'Join'()
BEGIN
Select sip2.temp_teste.sitio
from sip2.temp_teste
inner join sip2.teste
on sip2.temp_teste.sitio = sip2.teste.sitio;
END
E gostava de saber como consigo saber o resultado do Join?
Pois, se o Join for 0, quer dizer que não há valores iguais, entao eu faria o insert dos registos da tabela temporária para a tabela final...
Alguém me pode explicar como posso fazer?
Obrigado
Cumprimentos
Estou a fazer um inner join de duas tabelas...
Código :
DELIMITER $$
CREATE DEFINER='root'@'localhost' PROCEDURE 'Join'()
BEGIN
Select sip2.temp_teste.sitio
from sip2.temp_teste
inner join sip2.teste
on sip2.temp_teste.sitio = sip2.teste.sitio;
END
E gostava de saber como consigo saber o resultado do Join?
Pois, se o Join for 0, quer dizer que não há valores iguais, entao eu faria o insert dos registos da tabela temporária para a tabela final...
Alguém me pode explicar como posso fazer?
Obrigado
Cumprimentos
DECLARE @Temp1 as varchar(50)
DECLARE @Temp2 as varchar(50)
DECLARE rs CURSOR FOR
Select sip2.temp_teste.sitio
from sip2.temp_teste
inner join sip2.teste
on sip2.temp_teste.sitio = sip2.teste.sitio
OPEN rs
-- Aqui você aponta os campos do Select, Coloque uma variavel para cada item do select que você precisar
-- respeitando a ordem do select
FETCH NEXT FROM rs INTO @Temp1, @Temp2
-- rs.eof = false
if (@@FETCH_STATUS = 0)
BEGIN
--Insert
INSERT INTO TabelaTemporaria (Campo1,Campo2,...)
VALUES (Resultado1,Resultado2,...)
END
Para você quiser passar para o proximo registro você pode usar esta comando
FETCH NEXT FROM rs INTO @Temp1, @Temp2
DECLARE @Temp2 as varchar(50)
DECLARE rs CURSOR FOR
Select sip2.temp_teste.sitio
from sip2.temp_teste
inner join sip2.teste
on sip2.temp_teste.sitio = sip2.teste.sitio
OPEN rs
-- Aqui você aponta os campos do Select, Coloque uma variavel para cada item do select que você precisar
-- respeitando a ordem do select
FETCH NEXT FROM rs INTO @Temp1, @Temp2
-- rs.eof = false
if (@@FETCH_STATUS = 0)
BEGIN
--Insert
INSERT INTO TabelaTemporaria (Campo1,Campo2,...)
VALUES (Resultado1,Resultado2,...)
END
Para você quiser passar para o proximo registro você pode usar esta comando
FETCH NEXT FROM rs INTO @Temp1, @Temp2
Boas
Estou a tentar fazer com o exemplo que me deu, mas não estou a conseguir não sei o que estou a fazer mal
DELIMITER $$
CREATE DEFINER='root'@'localhost' PROCEDURE 'Join2'()
BEGIN
-- Definição de variáveis utilizadas no Procedimento
Declare CODIGO_INVENTARIO varchar(255);
Declare sitio, TIPO_ACHADO, CATEGORIA_ACH, MATERIA_PRIMA_ACH, NIVEL_ARTIFICIAL, CAMADA, QUADRADO, ORIENTACAO, INCLINACAO, DEPOSITO varchar(45);
Declare CONSOLIDACAO, RESTAURO, MOLDAGEM_REPLICA, ANALISE varchar(45);
Declare DESCRICAO, OBSERVACOES varchar(255);
Declare ANO, XN, YN, ZN,C_cm,L_cm,E_cm,A_cm,D_cm,CAIXA,CONTENTOR,PRATELEIRA int(11);
Declare a,b int;
-- Definição do cursor
Declare c1 cursor for(
Select sip2.temp_teste.*
from sip2.temp_teste
where sip2.temp_teste.sitio != sip2.teste.sitio);
-- Definição da variável de controle de looping do cursor
Declare continue HANDLER for not found
SET b = 1;
-- Abre o cursor
OPEN c1;
Repeat
Fetch c1 into CODIGO_INVENTARIO, sitio,TIPO_ACHADO,CATEGORIA_ACH,MATERIA_PRIMA_ACH,DESCRICAO,ANO,NIVEL_ARTIFICIAL,CAMADA,QUADRADO,XN,YN,ZN,ORIENTACAO,INCLINACAO,DEPOSITO,C_cm,L_cm,E_cm,A_cm,D_cm,CONSOLIDACAO,RESTAURO,MOLDAGEM_REPLICA,ANALISE,CAIXA,CONTENTOR,PRATELEIRA,OBSERVACOES;
if b = 0 then
INSERT INTO sip2.teste (CODIGO_INVENTARIO, sitio,TIPO_ACHADO,CATEGORIA_ACH,MATERIA_PRIMA_ACH,DESCRICAO,ANO,NIVEL_ARTIFICIAL,CAMADA,QUADRADO,XN,YN,ZN,ORIENTACAO,INCLINACAO,DEPOSITO,C_cm,L_cm,E_cm,A_cm,D_cm,CONSOLIDACAO,RESTAURO,MOLDAGEM_REPLICA,ANALISE,CAIXA,CONTENTOR,PRATELEIRA,OBSERVACOES)
SELECT * FROM sip2.temp_teste;
end if;
until b = 1
end repeat;
Close c1;
END
Pode me ajudar a perceber o que estou a fazer mal?
Estou a tentar fazer com o exemplo que me deu, mas não estou a conseguir não sei o que estou a fazer mal
DELIMITER $$
CREATE DEFINER='root'@'localhost' PROCEDURE 'Join2'()
BEGIN
-- Definição de variáveis utilizadas no Procedimento
Declare CODIGO_INVENTARIO varchar(255);
Declare sitio, TIPO_ACHADO, CATEGORIA_ACH, MATERIA_PRIMA_ACH, NIVEL_ARTIFICIAL, CAMADA, QUADRADO, ORIENTACAO, INCLINACAO, DEPOSITO varchar(45);
Declare CONSOLIDACAO, RESTAURO, MOLDAGEM_REPLICA, ANALISE varchar(45);
Declare DESCRICAO, OBSERVACOES varchar(255);
Declare ANO, XN, YN, ZN,C_cm,L_cm,E_cm,A_cm,D_cm,CAIXA,CONTENTOR,PRATELEIRA int(11);
Declare a,b int;
-- Definição do cursor
Declare c1 cursor for(
Select sip2.temp_teste.*
from sip2.temp_teste
where sip2.temp_teste.sitio != sip2.teste.sitio);
-- Definição da variável de controle de looping do cursor
Declare continue HANDLER for not found
SET b = 1;
-- Abre o cursor
OPEN c1;
Repeat
Fetch c1 into CODIGO_INVENTARIO, sitio,TIPO_ACHADO,CATEGORIA_ACH,MATERIA_PRIMA_ACH,DESCRICAO,ANO,NIVEL_ARTIFICIAL,CAMADA,QUADRADO,XN,YN,ZN,ORIENTACAO,INCLINACAO,DEPOSITO,C_cm,L_cm,E_cm,A_cm,D_cm,CONSOLIDACAO,RESTAURO,MOLDAGEM_REPLICA,ANALISE,CAIXA,CONTENTOR,PRATELEIRA,OBSERVACOES;
if b = 0 then
INSERT INTO sip2.teste (CODIGO_INVENTARIO, sitio,TIPO_ACHADO,CATEGORIA_ACH,MATERIA_PRIMA_ACH,DESCRICAO,ANO,NIVEL_ARTIFICIAL,CAMADA,QUADRADO,XN,YN,ZN,ORIENTACAO,INCLINACAO,DEPOSITO,C_cm,L_cm,E_cm,A_cm,D_cm,CONSOLIDACAO,RESTAURO,MOLDAGEM_REPLICA,ANALISE,CAIXA,CONTENTOR,PRATELEIRA,OBSERVACOES)
SELECT * FROM sip2.temp_teste;
end if;
until b = 1
end repeat;
Close c1;
END
Pode me ajudar a perceber o que estou a fazer mal?
Vocês esta usando uma proc diferente da que eu te passei.
Eu nem entendi muito bem qual a sua ideia com ela.
Você colocou: [Ô]Caso não encontrado[Ô] => SET b=1
E depois colocou: Se for: b = 0 => INSERT.
Não seria para inserir caso seja b=1?
Eu nem entendi muito bem qual a sua ideia com ela.
Você colocou: [Ô]Caso não encontrado[Ô] => SET b=1
E depois colocou: Se for: b = 0 => INSERT.
Não seria para inserir caso seja b=1?
Tópico encerrado , respostas não são mais permitidas