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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, 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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, 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
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