Ayuda con Consulta en SQL SERVER

Que tal, saludos a todos...
Voy a tratar de ser lo más gráfico en explicar lo que deseo...
Se trata de una base de datos que contiene recetas...
Contiene estas tablas:
RECETA que tiene el código de la receta "COD_REC", el nombre "NOMBRE_REC" y una descripción "DESC_REC"...
TIPOINGREDIENTE que contiene código de tipo de ingrediente "COD_TIPO" y el nombre del tipo "NOMBRE_TIPO".
INGREDIENTE contiene código de ingrediente "COD_ING", el nombre del ingrediente "NOMBRE_ING" y tipo de ingrediente "COD_TIPO".
Y por ultimo RECETAINGREDIENTE que contiene relación entre las recetas (referenciado con el código de la receta "COD_REC") y los ingredientes que contiene (referenciado con el código del Ingrediente "COD_ING").
Entonces la idea de esto es que se pueda buscar RECETAS que incluyan ingredientes que el usuario especifica. Por ejemplo: Buscar las recetas que incluyan harina, huevo y naranja... El resultado sería por ejemplo una Torta de Naranja o Galletas de Naranja, es decir las recetas incluyen todos esos ingredientes. En el resultado no saldría por ejemplo una Tortilla (Huevos Revueltos) ya que no tiene todos los ingredientes restantes.
No he podido lograr una consulta SQL que me de ese resultado y necesito ayuda...
Lo único que he podido lograr es una consulta que me da todas las recetas que contienen por lo menos un ingrediente (COSA QUE NO QUIERO)... Que es algo como esto:
SELECT dbo.RECETA.NOMBRE_REC, dbo.RECETA.COD_REC
FROM dbo.RECETA INNER JOIN
dbo.RECETAINGREDIENTE ON dbo.RECETA.COD_REC = dbo.RECETAINGREDIENTE.COD_REC
WHERE (dbo.RECETAINGREDIENTE.COD_ING = '1') OR
(dbo.RECETAINGREDIENTE.COD_ING = '2') OR (dbo.RECETAINGREDIENTE.COD_ING = '3')
Gracias por su atención...

1 Respuesta

Respuesta
1
Tu consulta repite la RECETA tantas veces como ingredientes de los solicitados tenga, debido al inner join que haces. Si los agrupas por RECETA puedes saber cuántos de los ingredientes contiene:
SELECT dbo.RECETA.NOMBRE_REC, dbo.RECETA.COD_REC, count(*)
FROM dbo.RECETA INNER JOIN
dbo.RECETAINGREDIENTE ON dbo.RECETA.COD_REC = dbo.RECETAINGREDIENTE.COD_REC
AND ( (dbo.RECETAINGREDIENTE.COD_ING = '1') OR
(dbo.RECETAINGREDIENTE.COD_ING = '2') OR (dbo.RECETAINGREDIENTE.COD_ING = '3') )
GROUP BY dbo.RECETA.NOMBRE_REC, dbo.RECETA.COD_REC HAVING count(*) = 3
No se si la sintaxis será correcta. Hace tiempo que no uso el SQL Server, pero espero que al menos la idea te sirva...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas