Erro em WHERE

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
FFreire
Usuário Nível 3
Usuário Nível 3
Mensagens: 113
Registrado em: 19 Mai 2013 16:16
Localização: Andirá-PR / Itaporanga-SP

Erro em WHERE

Mensagem por FFreire »

O comando abaixo traz os registros que necessito:

Código: Selecionar todos

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

Código: Selecionar todos

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
MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Erro em WHERE

Mensagem por MSDN »

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 !
Avatar do usuário
FFreire
Usuário Nível 3
Usuário Nível 3
Mensagens: 113
Registrado em: 19 Mai 2013 16:16
Localização: Andirá-PR / Itaporanga-SP

Erro em WHERE

Mensagem por FFreire »

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

Resolvi dessa forma:

Código: Selecionar todos

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
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

Erro em WHERE

Mensagem por tonicm »

Tente assim:
select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and fkcc not in(3, 5, 31)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro em WHERE

Mensagem por JoséQuintas »

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

Código: Selecionar todos

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro em WHERE

Mensagem por JoséQuintas »

Só revisando:

Código: Selecionar todos

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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
FFreire
Usuário Nível 3
Usuário Nível 3
Mensagens: 113
Registrado em: 19 Mai 2013 16:16
Localização: Andirá-PR / Itaporanga-SP

Erro em WHERE

Mensagem por FFreire »

Vejam

Digamos que eu tenha uma tabela com as seguintes linhas (dados):

Código: Selecionar todos

#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:

Código: Selecionar todos

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.

Código: Selecionar todos

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 do usuário
FFreire
Usuário Nível 3
Usuário Nível 3
Mensagens: 113
Registrado em: 19 Mai 2013 16:16
Localização: Andirá-PR / Itaporanga-SP

Erro em WHERE

Mensagem por FFreire »

Revendo com mais calma

o correto é:

Código: Selecionar todos

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
Responder