Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite join命令4表_Sql_Database_Sqlite_Join - Fatal编程技术网

SQLite join命令4表

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])| 表格:菜单 |

我是sql方面的新手,我需要一些帮助。 我有3-4个表,我想使用sqlite命令返回一些行。表如下

餐桌:餐厅

| 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
结构:餐厅->菜单->食品->食品包含配料->配料。理解这个复杂的查询有点困难,但我会尝试处理这是什么,谢谢。这真的不是一个复杂的查询。这是同一类型的简单连接,在多个表中多次发生,仅此而已。一旦你理解了“链接”菜单和餐具配料表的目的,一切都会变得清晰起来。