Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Quati Maldito

select dinamico

Recommended Posts

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"

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.