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

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
sergiosouzalima
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 26 Out 2020 11:25
Localização: São Paulo / SP

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

Mensagem 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!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3109
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

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

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Responder