Tem lá o cadastro de formas de pagamento, e a indicação no cadastro do cliente.
(Na época não tinha validação na exclusão, e apagaram formas de pagamento em uso)
Como listar as formas de pagamento que ficaram sem cadastro?
1) a informação está no cadastro, então...
SELECT CDFORPAG FROM JPCADASTRO
2) não preciso repetido, então...
SELECT DISTINCT CDFORPAG FROM JPCADASTRO
3) O que não tem no outro cadastro
duas opções:
a) comparar com a lista do outro cadastro
SELECT DISTINCT CDFORPAG FROM JPCADASTRO WHERE NOT CDFORPAG IN ( SELECT IDFORPAG FROM JPFORPAG )
b) idem, mostrando o que não tem equivalência
select distinct cdforpag from jpcadastro
left join jpforpag on jpforpag.idforpag = jpcadastro.cdforpag
where
jpforpag.idforpag is null
*** NAO DEU CERTO *** relacionar e mostrar diferentes *** NAO DEU CERTO ***
select distinct cdforpag from jpcadastro
left join jpforpag on jpforpag.idforpag = jpcadastro.cdforpag
where
jpcadastro.cdforpag <> jpforpag.idforpag
Pois é... várias opções de fazer a mesma coisa.
E como se usa isso no programa?
Código: Selecionar todos
WITH OBJECT oRs := oConexao:Execute( "SELECT DISTINCT CDFORPAG FROM JPCADASTRO WHERE NOT CDFORPAG IN ( SELECT IDFORPAG FROM JPFORPAG )" )
DO WHILE ! :Eof()
? :Fields( "IDFORPAG" ):Value
:MoveNext()
ENDDO
:Close()
ENDWITH
HeidiSQL
Lembra o DBASE e DBFs, mas... comandos SQL
Já comentei aqui:
O DBASE era algo parecido com isso, digitar e mostrar o resultado.
Com certeza, todos aqui já usaram o DBASE, então.... é quase como voltar ao passado... como um DBASE que recebeu mais opções.
A principal diferença é que agora o aplicativo também pode usar.
Conclusão:
Usar SQL é voltar ao passado, é um recomeço das coisas.

