Clipper On Line • Ver Tópico - Erro em WHERE

Erro em WHERE

Discussão sobre SQL

Moderador: Moderadores

 

Erro em WHERE

Mensagempor FFreire » 04 Out 2019 15:41

O comando abaixo traz os registros que necessito:
select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and fkcc != 5

Quando altero para o comando a seguir:
select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and fkcc != 5 and fkprodcc != 31 and fkloteprodcc != 3

Ele traz o mesmo resultado do anterior, aparentemente ignorando as duas condições adicionadas. E a tabela possui registros que atendem essas duas condições adicionadas.

Aparentemente é um comando simples e comum, mas, não esta retornando os dados

Alguém ja passou por isso e poderia ajudar ?
Harbour 3.2.0+MiniGui Extended 16.02+BCC5 / HWGdebug / SIXCDX / PostgreSQL 9.5 / LetoDB 2.15 / Java8
fabiano@ffsoft.com.br
Avatar de usuário

FFreire
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 113
Data de registro: 19 Mai 2013 16:16
Cidade/Estado: Andirá-PR / Itaporanga-SP
Curtiu: 0 vez
Mens.Curtidas: 5 vezes

Erro em WHERE

Mensagempor MSDN » 04 Out 2019 16:52

Nessa sentença SQL que vc fez, ele só vai trazer um resultado caso as 3 condições ( != ) sejam válidas ao mesmo tempo, pq vc pede usando AND e não OR, talvez esteja ai o problema !
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Erro em WHERE

Mensagempor FFreire » 04 Out 2019 17:19

O and esta correto...tem que ser válidas as 4 condições ao mesmo tempo

Resolvi dessa forma:
select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and concat(cast(fkcc as text),cast(fkprodcc as text),cast(fkloteprodcc as text)) <> '5313'


O pq de não funcionar da outra forma, sinceramente não sei !
Harbour 3.2.0+MiniGui Extended 16.02+BCC5 / HWGdebug / SIXCDX / PostgreSQL 9.5 / LetoDB 2.15 / Java8
fabiano@ffsoft.com.br
Avatar de usuário

FFreire
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 113
Data de registro: 19 Mai 2013 16:16
Cidade/Estado: Andirá-PR / Itaporanga-SP
Curtiu: 0 vez
Mens.Curtidas: 5 vezes

Erro em WHERE

Mensagempor tonicm » 04 Out 2019 18:14

Tente assim:

select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and fkcc not in(3, 5, 31)
tonicm
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 08 Mar 2016 21:51
Cidade/Estado: Porto
Curtiu: 12 vezes
Mens.Curtidas: 1 vez

Erro em WHERE

Mensagempor JoséQuintas » 04 Out 2019 20:08

Sei lá se o := vale pro SQL.
Eu tentaria trocando por <>, ou assim:

select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and not ( fkcc = 5 and fkprodcc = 31 and fkloteprodcc = 3 )


Mas pensando bem... comparando com a que funcionou... seria and ( xxx != ... OR.... )
OR no lugar de AND, e adicionando parêntesis.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Erro em WHERE

Mensagempor JoséQuintas » 04 Out 2019 20:15

Só revisando:

concat(cast(fkcc as text),cast(fkprodcc as text),cast(fkloteprodcc as text)) <> '5313'


Isso significa que qualquer um que for diferente é pra entrar. então 5312 sai.

No seu comando inicial, só iria sair se todos fossem diferentes. então 5312 NÃO sai porque três continuam iguais, só um é diferente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Erro em WHERE

Mensagempor FFreire » 11 Out 2019 08:55

Vejam

Digamos que eu tenha uma tabela com as seguintes linhas (dados):
#registro      fkcc             fkprodcc    fkloteprodcc         idfecha
1                 5                  31             3                2029
2                 5                  31             5                2029
3                 5                  32             3                2029
4                 7                   1             1                2029
5                 8                   1             7                2029

o que quero é que quando dê o select abaixo:
select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and fkcc != 5 and fkprodcc != 31 and fkloteprodcc != 3

Ele deveria trazer para mim todos os registros que sejam totalmente diferente do registro 1, portanto ele deveria retornar
os registros 2,3,4,5. O select esta correto, mas ele traz apenas os registros 4 e 5, dai quando eu transformo tudo em texto e concateno dai funciona.
select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and concat(cast(fkcc as text),cast(fkprodcc as text),cast(fkloteprodcc as text)) <> '5313'

o que me causou estranheza, pois o primeiro comando é exatamente igual, mas comparo inteiros com inteiros, ja no segundo comparo alfanuméricos com alfanuméricos e o resultado é diferente, no caso ai, o segundo comando é o correto.
Harbour 3.2.0+MiniGui Extended 16.02+BCC5 / HWGdebug / SIXCDX / PostgreSQL 9.5 / LetoDB 2.15 / Java8
fabiano@ffsoft.com.br
Avatar de usuário

FFreire
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 113
Data de registro: 19 Mai 2013 16:16
Cidade/Estado: Andirá-PR / Itaporanga-SP
Curtiu: 0 vez
Mens.Curtidas: 5 vezes

Erro em WHERE

Mensagempor FFreire » 11 Out 2019 09:17

Revendo com mais calma

o correto é:
select * from movcentrocusto where idfecha = 4634 and ( fkcc <> 5 or fkprodcc <> 31 or fkloteprodcc <> 3 )

Eu que causei confusão! Mas fica o exemplo ai!
O Marcelo ja tinha matado no primeiro post, mas com a pressa em resolver, não parei para pensar!
Muito obrigado a todos!
Harbour 3.2.0+MiniGui Extended 16.02+BCC5 / HWGdebug / SIXCDX / PostgreSQL 9.5 / LetoDB 2.15 / Java8
fabiano@ffsoft.com.br
Avatar de usuário

FFreire
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 113
Data de registro: 19 Mai 2013 16:16
Cidade/Estado: Andirá-PR / Itaporanga-SP
Curtiu: 0 vez
Mens.Curtidas: 5 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


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