Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera, boa tarde!
Tenho uma tabela mais ou menos assim:
id | valor | nome_campo | item_id (fk)
----------------------------------------------
1 | 9 | campo_1 | 22
2 | 10 | campo_2 | 21
3 | 2 | campo_2 | 22
4 | 3 | campo_2 | 21
5 | 3 | campo_1 | 22
6 | 9 | campo_2 | 26
7 | 9 | campo_1 | 22
8 | 9 | campo_3 | 25
9 | 10 | campo_4 | 27
10 | 9 | campo_1 | 24
11 | 10 | campo_2 | 22
12 | 10 | campo_2 | 24
13 | 10 | campo_2 | 22
14 | 10 | campo_1 | 21
Preciso listar todos os registros onde:
nome_campo = 'campo_1' e valor = 9
E / OU ????
nome_campo = 'campo_2' e valor = 10
mas que a coluna item_id sejam em comum aos registros retornados com base nas linha acima.
O resultado esperado é este:
id | valor | nome_campo | item_id (fk)
----------------------------------------------
1 | 9 | campo_1 | 22
7 | 9 | campo_1 | 22
11 | 10 | campo_2 | 22
13 | 10 | campo_2 | 22
12 | 10 | campo_2 | 24
10 | 9 | campo_1 | 24
Os valores que são passados para a "montagem" do where da query são "campo_1, valor 9 e campo_2, valor 10"
Então eu usei dessa maneira até funcionou mas não do jeito que eu queria pois ele traz os dados cujo os valores são iguais a 9 ou igual a 10. Ou seja eu espero esse resultado
id | valor | nome_campo | item_id (fk)
----------------------------------------------
1 | 9 | campo_1 | 22
11 | 10 | campo_2 | 22
7 | 9 | campo_1 | 23
13 | 10 | campo_2 | 23
Mais essa solução traz esse dados , trazendo "ou" um "ou" outro
id | valor | nome_campo | item_id (fk)
----------------------------------------------
6 | 9 | campo_2 | 26
7 | 15 | campo_1 | 26
8 | 7 | campo_2 | 27
9 | 10 | campo_1 | 27
até tentei colocar and mais não vai
O que quiz dizer sobre o id é que ele não pode ser da maneira abaixo pois quero o retorno de todos os dados que procurar e não apena de um ou outro como esta abaixo trazendo um unico valor de um id
id | valor | nome_campo | item_id (fk)
----------------------------------------------
6 | 9 | campo_2 | 26
7 | 15 | campo_1 | 26
8 | 7 | campo_2 | 27
9 | 10 | campo_1 | 27
5 | 10 | campo_1 | 29
>
não seria só isto?
select *
from ods.tabela
where (nome_campo = 'campo_1' and valor = 9)
or (nome_campo = 'campo_2' and valor = 10)
order by id
Não entendi o que você quis dizer sobre a coluna item_id
Tente só mudar, na última linha, de id para item_id:
select *
from ods.tabela
where (nome_campo = 'campo_1' and valor = 9)
or (nome_campo = 'campo_2' and valor = 10)
order by item_id
Eu testei essa opção do order by mais não deu certo tbm
Deixa-me ver se entendi o que precisa...
Além das condições já descritas (campo_1, valor 9 e campo_2, valor 10), ainda precisa que o campo item_id seja o mesmo entre elas?
Se for isso, o problema está na ordenação.
Vejamos:
select *
from ods.tabela
where (nome_campo = 'campo_1' and valor = 9)
or (nome_campo = 'campo_2' and valor = 10)
order by item_id ASC, valor ASC, nome_campo ASC
Seria isso?
não seria só isto?
select *
from ods.tabela
where (nome_campo = 'campo_1' and valor = 9)
or (nome_campo = 'campo_2' and valor = 10)
order by id
Não entendi o que você quis dizer sobre a coluna item_id