Select varios valores en tabla secundaria.

03/10/2006 - 17:19 por Marianoh | Informe spam
Hola grupo:

Tengo dos tablas relacionadas, Proyectos y Personas, la relación es 1
a n.
Yo quiero obtener todos los proyectos donde estuvieron la Sra.'Gómez'
y 'García'
El resultado lo obtengo con la siguinte consulta:

SELECT ID
FROM PROYECTOS
WHERE
PROYECTOS.ID IN
(SELECT PROYECTOS.ID
FROM PROYECTOS
INNER JOIN PERSONAS
ON PROYECTOS.ID = PERSONAS.ID_PROYECTOS
WHERE PERSONAS.APELLIDO_1 = 'GOMEZ'
AND PERSONAS.SEXO='F')
AND PROYECTOS.ID IN
(SELECT PROYECTOS.ID
FROM PROYECTOS
INNER JOIN PERSONAS
ON PROYECTOS.ID = PERSONAS.ID_PROYECTOS
WHERE PERSONAS.APELLIDO_1 = 'GARCIA')

El tema es que como la lista de nombres puede extenderse
considerablemente y esto forma parte de una consulta mayor quisiera
saber si hay una mejor manera de obtener el resultado.

Saludos: Mariano

Preguntas similare

Leer las respuestas

#6 Marianoh
06/10/2006 - 14:43 | Informe spam
Corrijo:
HAVING count (DISTINCT NroCriterio) = 3
AND count (DISTINCT ID) >= 3


Marianoh ha escrito:

Alejandro, nuevamente gracias por contestar.

La consulta ahora funciona, el único problema es que si hay dos
García y ningún Gómez los proyectos machean igual.

Igualmente me sirvió de puntapié para resolver el problema, la
solución es un poco más compleja porque hay condiciones que no
nombre, como que un criterio puede ser APELLIDO García y otro puede
ser NOMBRE Clara, pero el usuario puede estar buscando 2 personas
distintas incluidas en el mismo proyecto.

Ahora, si hay una persona llamada Clara García necesito que la
consulta no retorne nada excepto que aparte haya otra Clara u otro
García. Simpático no?

Bueno, despues de darle vuelta la solución parece ser:

SELECT DISTINCT ID_PROYECTOS FROM
(
(
SELECT ID_PROYECTOS, ID, '1' AS NroCriterio
FROM PERSONAS
WHERE (PERSONAS.APELLIDO_1 = 'GOMEZ'
AND PERSONAS.SEXO='F')
)
UNION
(
SELECT ID_PROYECTOS, ID, '3' AS NroCriterio
FROM PERSONAS
WHERE PERSONAS.APELLIDO_1 = 'GARCIA'
)
UNION
(
SELECT ID_PROYECTOS, ID, '2' AS NroCriterio
FROM PERSONAS
WHERE PERSONAS.nombre_1 = 'CLARA'
)
) AS T
GROUP BY ID_PROYECTOS
HAVING count (DISTINCT NroCriterio) >= 3
AND count (DISTINCT ID) = 3

Bueno, falta probarlo bien pero en fin, si no funciona aviso.

Saludos y gracias nuevamente a Alejandro.

Marianoh
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida