Página 1 de 1

Erro em WHERE

Enviado: 04 Out 2019 15:41
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 ?

Erro em WHERE

Enviado: 04 Out 2019 16:52
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 !

Erro em WHERE

Enviado: 04 Out 2019 17:19
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 !

Erro em WHERE

Enviado: 04 Out 2019 18:14
por tonicm
Tente assim:
select fkcc,fkprodcc,fkloteprodcc from movcentrocusto where idfecha = 2029 and fkcc not in(3, 5, 31)

Erro em WHERE

Enviado: 04 Out 2019 20:08
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.

Erro em WHERE

Enviado: 04 Out 2019 20:15
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.

Erro em WHERE

Enviado: 11 Out 2019 08:55
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.

Erro em WHERE

Enviado: 11 Out 2019 09:17
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!