Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Possuo duas tebelas
User
- coduser (int PK), depart_cod (int), cargos_cod(int), funcoes_cod(int)
Regras
- idview (int PK), depart_cod (int), cargos_cod(int), funcoes_cod(int)
Objetivo durante a consulta na tabela regra retorne os usuários que atendem as regras, porém poderá ter regras possuem uma condição 0 aceitando todos, ou seja, regra idview 26 qualquer usuários do departamento 142 deverá ser relacionado.
Resultados esperados por cada regra:
idview 30 = coduser: 40,44
idview 26 = coduser: 1,45
idview 27 = coduser: 1
idview 29 = coduser: 30
idview 28 = coduser: 30
Esse é um problema difícil, o máximo que eu consegui foi isso:
select * from user u, regras r where idview=30 and u.cargos_cod=r.cargos_cod;
select * from user u, regras r where (idview=26 and u.cargos_cod=r.cargos_cod) or (idview=26 and u.depart_cod=r.depart_cod);
select * from user u, regras r where idview=27 and u.cargos_cod=r.cargos_cod;
select * from user u, regras r where idview=28 and u.cargos_cod=r.cargos_cod;
O problema está no idview=26. Se eu colocar na consulta o depart_cod para as outras consultas, as respostas vão ser diferentes.
Talvez fique lento por conta dos "or" , colunas abreviadas por preguiça
Select *
From user u,regras r
Where ( (r.dep = u.dep) or r.dep=0) or
(r.cargo = u.cargo) or r.cargo=0)
(r.fun = u.fun) or r.fun=0) )