Usuário com melhor resposta
Retornar dados com WHERE de 3 valores em uma coluna apenas

Pergunta
-
Tenho essas Tres tabelas tabelas:
|Clientes |
|ID Nome RG |
|1 Vitor 123 |
|2 Sabrinha 235 |
|3 Calor 984 |
|Checks |
|ID Nome |
|1 Check1 |
|2 Check2 |
|3 Check3 |
|Acessos |
|ID ID_CLIENTE ID_CHECK|
|1 1 1 |
|2 2 1 |
|3 1 2 |
|4 3 2 |
|5 1 3 |
|6 2 3 |
|7 3 3 |
E preciso por Um select retornar so quem tem acesso ao check 1,2,3
Se eu usar Where id_check='1' AND id_check='2' AND id_check='3'
Não ira retornar nada, e caso eu mude para OR ao inves de AND ele ira retornar todos ,e caso eu use tambem esse comando
WHERE id_check IN (1,2,3) ira me retornar todos os clientes, como por forma de select consiguo trazer apenas o cliente 1 que tem acesso a todos os checks ?
No aguardo....
Respostas
-
O unico jeito é concatenar as linhas, este jeito:
Select * from ( SELECT A.ID_CLIENTE,STUFF((SELECT ',' + B.ID_CHECK FROM Acessos B WHERE A.ID_CLIENTE=B.ID_CLIENTE ORDER BY B.ID_CLIENTE, B.ID_CHECK FOR XML PATH(''),TYPE ).VALUE('.','varchar(max)') ,1,2, '' ) AS AcessosCliente FROM Acessos A GROUP BY A.ID_CLIENTE) C where C.AcessosCliente='1,2,3'
Ou em cascata
select * from Acessos where id_check='3' and ID_CLIENTE in (select ID_CLIENTE from Acessos where id_check='2' and ID_CLIENTE in (select ID_CLIENTE from Acessos where id_check='1' ) )
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator quarta-feira, 23 de setembro de 2015 18:31
- Marcado como Resposta Vitor Bueno quarta-feira, 23 de setembro de 2015 19:19
Todas as Respostas
-
O unico jeito é concatenar as linhas, este jeito:
Select * from ( SELECT A.ID_CLIENTE,STUFF((SELECT ',' + B.ID_CHECK FROM Acessos B WHERE A.ID_CLIENTE=B.ID_CLIENTE ORDER BY B.ID_CLIENTE, B.ID_CHECK FOR XML PATH(''),TYPE ).VALUE('.','varchar(max)') ,1,2, '' ) AS AcessosCliente FROM Acessos A GROUP BY A.ID_CLIENTE) C where C.AcessosCliente='1,2,3'
Ou em cascata
select * from Acessos where id_check='3' and ID_CLIENTE in (select ID_CLIENTE from Acessos where id_check='2' and ID_CLIENTE in (select ID_CLIENTE from Acessos where id_check='1' ) )
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator quarta-feira, 23 de setembro de 2015 18:31
- Marcado como Resposta Vitor Bueno quarta-feira, 23 de setembro de 2015 19:19
-