OBTER RESULTADO DO JOIN DE DUAS TABELAS

HELIO13 25/07/2012 11:57:21
#406570
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
VELDRAME 25/07/2012 17:40:04
#406595
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
HELIO13 28/07/2012 09:52:33
#406753
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?
VELDRAME 30/07/2012 10:08:49
#406820
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?

Tópico encerrado , respostas não são mais permitidas