0

Tengo dos tablas SQL donde en una tengo una lista de alimentos

alimento calorias
Chocolate 23
Café 14

y una con cantidades consumidas por persona de cada alimento

persona alimento cantidades
persona 1 chocolate 20,4
persona 1 café 201
persona 1 tortilla 25

Necesito unir estas dos tablas con un join, pero al hacerlo el tercer dato (persona 1, tortilla, 25) se pierde debido a que no aparece en la primera tabla.

Lo que quiero es que ese dato no se pierda sino que, por el contrario, aparezca igual a la segunda tabla así no esté en la primera.

El código es el siguiente: SELECT * FROM cantidades c JOIN calorias f ON c.alimento = f.alimento;

  • Mira [ask] para que tu pregunta sea mejor recibida. También, aprovecha y haz el [tour] para entender mejor cómo funcionamos y de paso obtener tu primera [medalla](https://es.stackoverflow.com/help/badges)! estas buscando hacer un left join (busca sobre eso en google) ;) – gbianchi May 04 '21 at 00:14
  • Cómo ingresarías “tortilla” si no existe en el catálogo de alimentos? Si necesitas las calorías de ese producto cómo calcularías? Deberías leer sobre las reglas de normalización en base de datos. – Bicho May 04 '21 at 01:12

1 Answers1

1

Primero que nada espero que "cantidades" y "calorías" sean el nombre de las tablas y no de las columnas ya que la sintaxis del JOIN trabaja sobre tablas

SELECT [COLUMNAS..] 
FROM [TABLA] 
JOIN [TABLA2] 
    ON [CONDICIONES JOIN...] 
WHERE [CONDICIONES...]

Ahora; lo que te recomiendo es que te familiarices con los diagramas de Venn que generan los tipos de JOIN (LEFT JOIN, RIGHT JOIN, INNER JOIN, FULL OUTER JOIN) que puedes hacer en MySQL (y en general en cualquier lenguaje SQL) Ya que éstos te permiten visualizar cómo se relacionan los conjuntos por medio de los JOIN.

Dicho lo anterior, lo que requieres es un LEFT JOIN hacia la tabla de "CALORIAS" para que traiga todo lo que tiene "CANTIDADES" junto con el producto cartesiano (el resultado del JOIN) de "CALORIAS". Obviamente el resultado traerá los datos de "CALORIAS" en NULL, los cuales puedes tratar con un IFNULL([COLUMNA], [VALOR DEFAULT]).