Skip to main content

Un ejemplo de consulta multitabla

Vamos a ver cómo sacaríamos los nombres de las recetas que llevan ternera usando solo una consulta sobre arias tablas a la vez.

La manera de hacerlo consultando las tablas por separado

Los ingredientes están en la tabla ingrediente, la unión de recetas con ingredientes está en la tabla receta_tiene_ingrediente, pero el nombre de las recetas está en la tabla receta.

Primero hay que buscar cuál es el identificador del ingrediente 'Ternera' para buscarlo en la tabla receta_tiene_ingrediente. Así esta tabla nos dará los identificadores de las recetas que llevan ternera y con ese identificador podremos ir a buscar las recetas en la tabla receta.

Identificador del ingrediente 'Ternera':

select id_ingrediente from ingrediente where nombre like 'Ternera';

Identificador de las recetas que llevan 'Ternera':

select id_receta from receta_tiene_ingrediente where id_ingrediente=1;

Recetas que llevan 'Ternera':

select nombre from receta where id_receta=9 or id_receta=1;
Consulta multitabla

El modo básico de hacerlo es poniendo en la cláusula from las tablas separadas por comas, y en la cláusula where indicar cómo se relacionan esas tablas, es decir, indicando qué columnas son las que deben ser iguales en cada fila.

En el ejemplo anterior sería:

SELECT receta.nombre
FROM ingrediente, receta_tiene_ingrediente, receta
WHERE ingrediente.id_ingrediente = receta_tiene_ingrediente.id_ingrediente 
	and receta_tiene_ingrediente.id_receta = receta.id_receta
    and ingrediente.nombre like 'Ternera';

Fíjate que se están indicando las columnas con el nombre de la tabla delante seguidos por un punto. Esto es necesario cuando en una consulta multitabla hay columnas en diferentes tablas con el mismo nombre, como es este caso, para saber a la columna de qué tabla se está haciendo referencia.


{{@5685}}