所以我有一个名为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;
答案 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个表:Meals
,Ingredients
和MealIngredients
。
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:");
}