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

时间:2018-02-08 23:48:17

标签: mysql

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

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

成分列是链接到第二个表的所有数字。它只是一个具有列名称ingredientId和成分的表。

我想在第二张表中显示mealName和实际成分,但我无法显示次要成分。

这只是为了显示ingredient1,但我需要全部5个。

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

2 个答案:

答案 0 :(得分:1)

使用现有架构,您需要将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

答案 1 :(得分:0)

您可以在一个语句中使用多个JOINS。但是,为了多次连接一个表,您必须每次为复制表提供一个新别名(AFAIK),就像它是一个唯一的表一样。

查询应如下所示:

public static void printSingleRidesMenu()
{
    //Single ride banner
    System.out.println("***************************************************");
    System.out.println("              Single Ride Tickets                  ");
    System.out.println("***************************************************");

    //Single ride pass options
    System.out.println("[1] Adult *13 years and over");
    System.out.println("[2] Child *4 to 12 years");
    System.out.println("[3] 3 years and under");
    System.out.println("Please Enter Your Ticket Selection:");
}