Página 1 de 1

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

Enviado: 13 Set 2021 14:08
por JoséQuintas

Código: Selecionar todos

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.

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

Enviado: 13 Set 2021 14:13
por JoséQuintas
Por exemplo, porque este não aceita?
Pra mostrar cadastros sem financeiro.

Código: Selecionar todos

SELECT IDCADASTRO, CDNOME 
FROM jpcadastro
outer join jpfinan on jpcadastro.idcadastro=jpfinan.ficadastro

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

Enviado: 13 Set 2021 15:55
por sergiosouzalima
Olá, Quintas!

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

Veja se ajuda.
select.png
left_joint.png

Abraços!

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

Enviado: 13 Set 2021 17:17
por JoséQuintas
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

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

Enviado: 14 Set 2021 01:30
por alxsts
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