Amigos,
tenho a seguinte necessidade:
1 - uma consulta que possui a tabela Sintomas PK(#num_paciente, #data_consulta, #cod_doenca, #cod_sintoma)
2 - tenho um filtro com campo cod_sintoma (duplo select)
Regra do negócio. Uma DIAGNOSTICO (cod_doenca) pode ter um ou mais SINTOMAS(cod_sintoma)
3 - Problema: O SQL, montou perfeitamente a seleção dos registros. Quando chamo o filtro e seleciono vários sintomas o SC utiliza a “sc_select_where” colocando a condição IN para os sintomas que selecionei. Ocorre que a condição IN utiliza o operador OR e não o AND. Logo, se forem selecionados varios sintomas a query retorna todas as doenças que possuam pelo menos um dos sintomas e o que preciso é que todos os sintomas pertençam a uma só doença.
Ex. cod_doença cod_sintoma
01 11
15
20 11
15
67
se forem selecionados no duplo select os sintomas 11, 15, 67 somente a doença 20 pode ser retornada.
Abaixo a query com o exemplo acima
SELECT s.num_paciente, s.data_consulta, s.cod_doenca, d.descricao, p.nome, p.idade, p.sexo, p.nascimento
FROM ( SELECT s.num_paciente, s.data_consulta, s.cod_doenca
FROM sintomas s
WHERE s.cod_sintoma IN (11,15,67)) t1, paciente p, doenca d // os itens da condição IN devem vir do duplo select dinamicamente
WHERE p.num_paciente = t1.num_paciente
AND d.cod_doenca = t1.cod_doenca
GROUP BY num_paciente_diag_pat, dat_atend_diag_pat, cod_doenca_diag_pat
HAVING COUNT(*) = 3 // este número do count depende da quantidade de itens selecionados do duplo select preenchido por variavel
Explicando a query:
Só preciso saber como recuperar os itens selecionados dos sintomas no duplo select, contar quantos foram selecionados e como posso fazer para executar essa query. Pensei em iniciar pelo filtro a aplicação de consulta, como modal.
Aguardo.