MYSQL 连接表,其中第二个表在表 1 的多个列中使用

标签 mysql

所以我有一个表 1,名为 Meals,这是我的列名称。

膳食名称、成分 1、成分 2、成分 3、成分 4、成分 5

成分列是链接到第二个表的所有数字。它只是一张包含列名“compactId”和“compactment”的表。

我想显示第二个表中的膳食名称和实际成分,但我无法让它显示次要成分。

这仅适用于显示成分 1,但我需要全部 5 个。

SELECT mealName
     , hearts
     , i.ingredient 
  FROM Meals m
  JOIN Ingredients i 
    ON i.ingredientId = m.ingredient1;

最佳答案

使用现有架构,您需要将 Meals 加入 Ingredients 5 次:

SELECT mealName,
    hearts,
    i1.*,
    i2.*,
    i3.*,
    i4.*,
    i5.*,
FROM Meals m
    INNER JOIN Ingredients i1
        ON m.ingredient1 = i1.ingredientId
    INNER JOIN Ingredients i2
        ON m.ingredient2 = i2.ingredientId
    INNER JOIN Ingredients i3
        ON m.ingredient3 = i3.ingredientId
    INNER JOIN Ingredients i4
        ON m.ingredient4 = i4.ingredientId
    INNER JOIN Ingredients i5
        ON m.ingredient5 = i5.ingredientId

但是如果一顿饭的成分超过 5 种会怎样呢?

更好的方法是有 3 个表:MealsIngredientsMealIngredients

Meals 表为:

id, meal_name, hearts

MealIngredients 表为:

meal_id, ingredient_id

成分保持不变。

然后您只需将三个表连接在一起:

SELECT m.name,
    i.ingredient
FROM Meals m
    INNER JOIN MealIngredients mi
        ON m.id = mi.meal_id
    INNER JOIN Ingredients i
        ON mi.ingredient_id = i

关于MYSQL 连接表,其中第二个表在表 1 的多个列中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48696648/

相关文章:

MySQL:如何将重复键上的字段更新为 1 以外的值?

mysql - 嵌套查询的问题

mysql - SELECT 读取 50 000 行/s 几天从不插入

mysql - 创建基于多列值计算总值的 View 表

mysql - 根据另一个列值按值排序

php - 数据库连接和SELECT

php - 我想从一个表格将数据发送到多个表中,但我选择的表不是其他表

匈牙利语字符的 MySQL 错误 ORDER BY

php - 按计算距离对 MySQL 结果进行排序(距离未存储在 DB 中)

使用 JOIN 和嵌套 NOT IN 的 Mysql 查询