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
 

Leer las respuestas

#1 Alejandro Mesa
03/10/2006 - 17:36 | Informe spam
Trata:

SELECT
PROYECTOS.ID
FROM
dbo.PROYECTOS
INNER JOIN
dbo.PERSONAS
ON PROYECTOS.ID = PERSONAS.ID_PROYECTOS
where
(
PERSONAS.APELLIDO_1 = 'GOMEZ'
or PERSONAS.APELLIDO_1 = 'GARCIA'
)
AND PERSONAS.SEXO='F'
group by
PROYECTOS.ID
having
count(distinct case when (PERSONAS.APELLIDO_1 = 'GOMEZ' or
PERSONAS.APELLIDO_1 = 'GARCIA') AND PERSONAS.SEXO='F' then
PERSONAS.APELLIDO_1 end) = 2
go

Compara los planes de ejecucion, asi como las estadisticas de lectura de
ambas sentencias.


AMB

"Marianoh" wrote:

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 similares