[RESOLVIDO] Problema de logica de banco

3 respostas
quaresma

BOA NOITE GALERA, TO COM UMA PROBLEMA DE LOGICA NO MEU SELECT

SELECT COUNT(*) AS idCAD_PROTOCOLOS FROM cad_protocolos, cad_pessoa where CAD_PESSOA_idCAD_PESSOA = idCAD_PESSOA and nome like '%%', or cpf like '%%'

ESTA REPETINDO OS VALORES QUANDO OS CAMPOS ESTÃO VAZIOS.

3 Respostas

WRYEL

1 - Não escreva em maisculo, parece que você está gritando.
2 - Use as boas práticas de query’s sql.
2.1 - Se seu banco só aceitar caracteres maiusculos, escreva a query toda em maisculo, caso contrário, em maiusculo só palavras reservadas.
2.1 - Quando possível use alias nos nomes das colunas para fazer JOIN

SELECT COUNT(*) AS idCAD_PROTOCOLOS FROM cad_protocolos, cad_pessoa where CAD_PESSOA_idCAD_PESSOA = idCAD_PESSOA and nome like '%%' or cpf like '%%'

se quiser contar a quantidade de registro com cpf e nomes em branco, use:

SELECT COUNT(*) AS idCAD_PROTOCOLOS FROM cad_protocolos, cad_pessoa where (CAD_PESSOA_idCAD_PESSOA = idCAD_PESSOA) and (nome = '' or cpf = '')

se os campos estiverem em nullos:

SELECT COUNT(*) AS idCAD_PROTOCOLOS FROM cad_protocolos, cad_pessoa where (CAD_PESSOA_idCAD_PESSOA = idCAD_PESSOA) and (nome IS NULL or cpf IS NULL)

ou ambos:

SELECT COUNT(*) AS idCAD_PROTOCOLOS FROM cad_protocolos, cad_pessoa where (CAD_PESSOA_idCAD_PESSOA = idCAD_PESSOA) and (nome IS NULL or cpf IS NULL or nome = '' or cpf = '')

[]'s

discorpio

Boa noite a todos.

Você deve atribuir uma aliás para a tabela também, senão como o SQL vai identificar qual campo pertence a quem.

SELECT COUNT(*) AS idCAD_PROTOCOLOS FROM cad_protocolos A, cad_pessoa B WHERE A.idCAD_PESSOA = B.idCAD_PESSOA and B.nome like '%%' or cpf like '%%'

Além disso, você quiser que a busca seja mais seletiva e confiável, faça a junção das tabelas utilizando um “INNER JOIN”, assim:

SELECT COUNT(*) AS idCAD_PROTOCOLOS FROM cad_protocolos A INNER JOIN cad_pessoa B ON A.idCAD_PESSOA = B.idCAD_PESSOA WHERE nome like '%%' or cpf like '%%'

Com o INNER JOIN, ele só contará os registros que tem relacionamento entre as duas tabelas, excluindo onde não há relação.

Eu não sei qual SGDB você usa, e por isso desconheço o dialeto SQL dele, contudo é sempre recomendar o dialeto padrão, que é de utilizar aliáses para as tabelas também.

Um abraço.

quaresma

galera obrigado pela ajuda
todas as dicas foram validas
discorpio muito obrigado teu help me salvou.

Criado 6 de março de 2012
Ultima resposta 6 de mar. de 2012
Respostas 3
Participantes 3