Clipper On Line • Ver Tópico - Tentei OUTER JOIN mas não deu, talvez por ser no INSERT

Tentei OUTER JOIN mas não deu, talvez por ser no INSERT

Discussão sobre SQL

Moderador: Moderadores

 

Tentei OUTER JOIN mas não deu, talvez por ser no INSERT

Mensagempor JoséQuintas » 13 Set 2021 14:08

CREATE PROCEDURE ze_SenhaAddModule( cModule VARCHAR(60), cModuleOld VARCHAR(60) )

BEGIN

INSERT
INTO JPSENHA
( PWTYPE, PWFIST, PWLAST )
SELECT DISTINCT
'A', PWFIRST, cModule
FROM JPSENHA
WHERE PWTYPE='A' AND PWLAST = cModuleOld
AND NOT EXISTS ( SELECT PWLAST FROM JPSENHA AS B
                 WHERE PWTYPE = 'A' AND B.PWFIRST=JPSENHA.PWFIRST
                 AND PWLAST=cModule );

END


Qual o objetivo?
Vai liberar um módulo (cModule) para TODOS os usuários que tenham acesso a outro modulo (cModuleOld)

SELECT PWFIRST FROM JPSENHA WHERE PWTYPE='A' AND PWLAST=cModuleOld
Isto vai trazer os usuários com acesso ao módulo base

Até aqui tudo bem, iria inserir PWTYPE='A' AND PWFIRST=resultado anterior AND PWLAST=cModule
Mas queria testar se já existe, e só incluir se faltar.
À primeira vista, o comando acima funciona mas... o OUTER JOIN não seria adequado pra isso?
E é tudo encima da mesma tabela, o que atrapalha relacionamento.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17693
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Tentei OUTER JOIN mas não deu, talvez por ser no INSERT

Mensagempor JoséQuintas » 13 Set 2021 14:13

Por exemplo, porque este não aceita?
Pra mostrar cadastros sem financeiro.

SELECT IDCADASTRO, CDNOME 
FROM jpcadastro
outer join jpfinan on jpcadastro.idcadastro=jpfinan.ficadastro
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17693
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Tentei OUTER JOIN mas não deu, talvez por ser no INSERT

Mensagempor sergiosouzalima » 13 Set 2021 15:55

Olá, Quintas!

Fiz um teste aqui usando MySql, e usei o LEFT JOIN.

Veja se ajuda.

select.png


left_joint.png


Abraços!
sergiosouzalima
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 44
Data de registro: 26 Out 2020 11:25
Cidade/Estado: São Paulo / SP
Curtiu: 1 vez
Mens.Curtidas: 4 vezes

Tentei OUTER JOIN mas não deu, talvez por ser no INSERT

Mensagempor JoséQuintas » 13 Set 2021 17:17

Obrigado pelo teste.
Tentando entender o OUTER JOIN, que achei que serviria pra isso, pra ser o contrário de INNER JOIN ou LEFT JOIN.

Nota: Outra opção seria usar o COUNT(FICADASTRO) AS QTD e GROUP BY IDCADASTRO HAVING QTD = 0, mas seria processar tudo pra obter a soma
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17693
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Tentei OUTER JOIN mas não deu, talvez por ser no INSERT

Mensagempor alxsts » 14 Set 2021 01:30

Olá!

JoséQuintas escreveu:Tentando entender o OUTER JOIN, que achei que serviria pra isso, pra ser o contrário de INNER JOIN ou LEFT JOIN.

Não, este tipo de join não serve para o que você quer. Nada a ver...

SQL Joins

Veja: What is UPSERT and how to do it in MySQL Isto funcionará se suas tabelas possuirem primary keys.

SQL Joins
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2602
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 15 vezes
Mens.Curtidas: 191 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro