SQLite join命令4表
我是sql方面的新手,我需要一些帮助。 我有3-4个表,我想使用sqlite命令返回一些行。表如下 餐桌:餐厅SQLite join命令4表,sql,database,sqlite,join,Sql,Database,Sqlite,Join,我是sql方面的新手,我需要一些帮助。 我有3-4个表,我想使用sqlite命令返回一些行。表如下 餐桌:餐厅 | Name | menuID | REFERENCES [Menu]([menuID])| | IngredientID | Name | | FoodIncIngredientID | FoodID REFERENCES [Food][FoodID] | IngredientID REFERENCES [Ingredient]([IngredientID])| 表格:菜单 |
| Name | menuID | REFERENCES [Menu]([menuID])|
| IngredientID | Name |
| FoodIncIngredientID | FoodID REFERENCES [Food][FoodID] | IngredientID REFERENCES [Ingredient]([IngredientID])|
表格:菜单
| MenuID | Name |
表格:配料
| Name | menuID | REFERENCES [Menu]([menuID])|
| IngredientID | Name |
| FoodIncIngredientID | FoodID REFERENCES [Food][FoodID] | IngredientID REFERENCES [Ingredient]([IngredientID])|
餐桌:包括配料在内的食品
| Name | menuID | REFERENCES [Menu]([menuID])|
| IngredientID | Name |
| FoodIncIngredientID | FoodID REFERENCES [Food][FoodID] | IngredientID REFERENCES [Ingredient]([IngredientID])|
餐桌:食物
| FoodID | Name | Type | MenuID REFERENCES [Menu][MenuID]|
我想查询一下,如果他们没有我要说的配料,我会返回餐馆的名称、食物名称和食物类型。
多谢各位
餐桌餐厅:
| Name | MenuId |
Goodys 2
Koumbaris 1
| MenuID | Name |
1 koumbarisMenu
2 goodysMenu
| FoodID | Name | Type | MenuID |
29 Chef's Salad Starter 2
31 Mama's Salad Starter 2
30 Ceasar's Salad Starter 2
| IngredientID | Name |
1 Cereals
2 Shellfish
SELECT Restaurant.Name, Food.Name, Food.Type
FROM Restaurant
INNER JOIN Menu ON Restaurant.menuID = Menu.MenuID
INNER JOIN Food ON Menu.MenuID = Food.MenuID
INNER JOIN Food_Incl_ingredient ON Food.FoodID = Food_Incl_ingredient.FoodID
INNER JOIN Ingredient ON Food_Incl_ingredient.FoodInclIngredientID = Ingredient.IngredientID
WHERE Ingredient.Name == 'Cereals'
| Name | Name | Type |
Goodys Chef's Salad Starter
Goodys Mama's Salad Starter
Goodys Ceasar's Salad Starter
表格菜单:
| Name | MenuId |
Goodys 2
Koumbaris 1
| MenuID | Name |
1 koumbarisMenu
2 goodysMenu
| FoodID | Name | Type | MenuID |
29 Chef's Salad Starter 2
31 Mama's Salad Starter 2
30 Ceasar's Salad Starter 2
| IngredientID | Name |
1 Cereals
2 Shellfish
SELECT Restaurant.Name, Food.Name, Food.Type
FROM Restaurant
INNER JOIN Menu ON Restaurant.menuID = Menu.MenuID
INNER JOIN Food ON Menu.MenuID = Food.MenuID
INNER JOIN Food_Incl_ingredient ON Food.FoodID = Food_Incl_ingredient.FoodID
INNER JOIN Ingredient ON Food_Incl_ingredient.FoodInclIngredientID = Ingredient.IngredientID
WHERE Ingredient.Name == 'Cereals'
| Name | Name | Type |
Goodys Chef's Salad Starter
Goodys Mama's Salad Starter
Goodys Ceasar's Salad Starter
餐桌食品:
| Name | MenuId |
Goodys 2
Koumbaris 1
| MenuID | Name |
1 koumbarisMenu
2 goodysMenu
| FoodID | Name | Type | MenuID |
29 Chef's Salad Starter 2
31 Mama's Salad Starter 2
30 Ceasar's Salad Starter 2
| IngredientID | Name |
1 Cereals
2 Shellfish
SELECT Restaurant.Name, Food.Name, Food.Type
FROM Restaurant
INNER JOIN Menu ON Restaurant.menuID = Menu.MenuID
INNER JOIN Food ON Menu.MenuID = Food.MenuID
INNER JOIN Food_Incl_ingredient ON Food.FoodID = Food_Incl_ingredient.FoodID
INNER JOIN Ingredient ON Food_Incl_ingredient.FoodInclIngredientID = Ingredient.IngredientID
WHERE Ingredient.Name == 'Cereals'
| Name | Name | Type |
Goodys Chef's Salad Starter
Goodys Mama's Salad Starter
Goodys Ceasar's Salad Starter
餐桌食品,包括配料:
| FoodInclIngredientID | FoodID | IngredientID |
1 29 1
6 31 1
8 30 1
餐桌配料:
| Name | MenuId |
Goodys 2
Koumbaris 1
| MenuID | Name |
1 koumbarisMenu
2 goodysMenu
| FoodID | Name | Type | MenuID |
29 Chef's Salad Starter 2
31 Mama's Salad Starter 2
30 Ceasar's Salad Starter 2
| IngredientID | Name |
1 Cereals
2 Shellfish
SELECT Restaurant.Name, Food.Name, Food.Type
FROM Restaurant
INNER JOIN Menu ON Restaurant.menuID = Menu.MenuID
INNER JOIN Food ON Menu.MenuID = Food.MenuID
INNER JOIN Food_Incl_ingredient ON Food.FoodID = Food_Incl_ingredient.FoodID
INNER JOIN Ingredient ON Food_Incl_ingredient.FoodInclIngredientID = Ingredient.IngredientID
WHERE Ingredient.Name == 'Cereals'
| Name | Name | Type |
Goodys Chef's Salad Starter
Goodys Mama's Salad Starter
Goodys Ceasar's Salad Starter
SQL查询:
| Name | MenuId |
Goodys 2
Koumbaris 1
| MenuID | Name |
1 koumbarisMenu
2 goodysMenu
| FoodID | Name | Type | MenuID |
29 Chef's Salad Starter 2
31 Mama's Salad Starter 2
30 Ceasar's Salad Starter 2
| IngredientID | Name |
1 Cereals
2 Shellfish
SELECT Restaurant.Name, Food.Name, Food.Type
FROM Restaurant
INNER JOIN Menu ON Restaurant.menuID = Menu.MenuID
INNER JOIN Food ON Menu.MenuID = Food.MenuID
INNER JOIN Food_Incl_ingredient ON Food.FoodID = Food_Incl_ingredient.FoodID
INNER JOIN Ingredient ON Food_Incl_ingredient.FoodInclIngredientID = Ingredient.IngredientID
WHERE Ingredient.Name == 'Cereals'
| Name | Name | Type |
Goodys Chef's Salad Starter
Goodys Mama's Salad Starter
Goodys Ceasar's Salad Starter
预期结果:
| Name | MenuId |
Goodys 2
Koumbaris 1
| MenuID | Name |
1 koumbarisMenu
2 goodysMenu
| FoodID | Name | Type | MenuID |
29 Chef's Salad Starter 2
31 Mama's Salad Starter 2
30 Ceasar's Salad Starter 2
| IngredientID | Name |
1 Cereals
2 Shellfish
SELECT Restaurant.Name, Food.Name, Food.Type
FROM Restaurant
INNER JOIN Menu ON Restaurant.menuID = Menu.MenuID
INNER JOIN Food ON Menu.MenuID = Food.MenuID
INNER JOIN Food_Incl_ingredient ON Food.FoodID = Food_Incl_ingredient.FoodID
INNER JOIN Ingredient ON Food_Incl_ingredient.FoodInclIngredientID = Ingredient.IngredientID
WHERE Ingredient.Name == 'Cereals'
| Name | Name | Type |
Goodys Chef's Salad Starter
Goodys Mama's Salad Starter
Goodys Ceasar's Salad Starter
我得到的唯一结果是第一行。问题出在哪里?只需连接所有需要的表,然后说
WHERE-component.Name!='肉“
SELECT Restaurant.Name, Food.Name, Food.Type
FROM Restaurant
JOIN Menu ON Restaurant.menuID = Menu.MenuID
JOIN Food ON Menu.MenuID = Food.MenuID
JOIN Food_Incl_ingredient ON Food.FoodID = Food_Incl_ingredient.FoodIncIngredientID
JOIN Ingredient ON Food_Incl_ingredient.FoodIncIngredientID = Ingredient.Ingredient.ID
WHERE Ingredient.Name != 'meat'
我希望我理解了你帖子中的表名和主键;)
…如果他们没有这种成分,我会说
这里有一个非常基本的结构,可以让您编写一个查询,说明餐厅是否需要为其菜单购买配料
你通常会安排一些事情,这样一家餐厅就可以有不止一份菜单,例如早餐、午餐、晚餐,可能还有餐饮或派对
请注意左连接和在最末端使用COALESCE
Restaurant
id
restaurantname
Menu
id
menuname e.g. Breakfast, Lunch, Dinner, Catering, Party, Special Cultural Holiday
Dish
id
dishname
Ingredient
id
ingredientname
--一道菜有一种或多种配料
Dish_Ingredients
dishid
ingredientid
--菜单上有一道或多道菜
MenuDish
menuid
dishid
--餐厅有一个或多个菜单
RestaurantMenu
restaurantid
menuid
--餐馆备有配料清单
RestaurantIngredients
restaurantid
ingredientid
quantityOnHand
--左连接将导致当菜肴调用库存中没有记录的配料时返回空值;因此,合并()
自从你说你是新来的,我就听说过这本书的好东西,在10分钟内自学SQL。学习基础知识可以避免很多的摸索。关于没有一个InCredit的部分是不清楚的。也展示一些你这边的努力。如果你也在解决这个问题,人们会在这里寻求帮助。这是一个愚蠢的;)。。。请看查询的第6行。您正在加入食品中包含配料的
。食品中包含配料的。
但是您应该加入食品中包含配料的。食品中包含配料的。
。还有一个小提示:在最后一行中使用=
,而不是=
.OMG!真不敢相信!谢谢,非常感谢。我简直不敢相信我竟然没看到它。:)谢谢你的帮助。奇怪的是为什么它只给我一种食物。数据库中至少有10种食物含有我所吃的谷类配料。我已经让它和谷类食品一样,在你的问题中,看起来你想要所有的餐厅+食物+类型,但没有配料。。。我的问题是给你所有不含肉的食物;)因此,如果你不想吃所有含肉的食物,你必须用=
而不是=代码>在最后一行。是的,我有put==put不正确。它只会给我返回一家有食物的餐厅,而不是10家,例如,其中包含麦片和另一个问题,为什么我们选择餐厅而不是其他桌子?基本上你可以从
中选择你想要的。我只想指出一个清晰的JOIN
结构:餐厅->菜单->食品->食品包含配料->配料。理解这个复杂的查询有点困难,但我会尝试处理这是什么,谢谢。这真的不是一个复杂的查询。这是同一类型的简单连接,在多个表中多次发生,仅此而已。一旦你理解了“链接”菜单和餐具配料表的目的,一切都会变得清晰起来。