0

私はSQLの初心者で、助けが必要です。3 ~ 4 個のテーブルがあり、いくつかの行を返す sqlite コマンドを作成したいと考えています。表は次のとおりです。

表:レストラン

| Name | menuID | REFERENCES [Menu]([menuID])|

表:メニュー

| MenuID | Name |

表:成分

| IngredientID | Name |

表: Food_Incl_ingredient

| 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

表 Food_Incl_ingredient:

| FoodInclIngredientID | FoodID | IngredientID |
          1               29           1
          6               31           1
          8               30           1

テーブルの成分:

| IngredientID |  Name  |
    1         Cereals
    2         Shellfish

SQL クエリ:

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

私が得る唯一の結果は最初の行です。

4

2 に答える 2

1

問題はどこですか?必要なすべてのテーブルに参加して、後でWHERE Ingredient.Name != 'meat'.

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'

あなたの投稿のテーブル名と主キーとは何かを理解できたと思います;)

于 2013-02-25T13:21:57.687 に答える
0

...if they don't have the ingredient i will say

以下は、レストランがメニューの食材を購入する必要があるかどうかを示すクエリを作成できるようにするための非常に基本的な構造です。

通常、レストランでは朝食、昼食、夕食、ケータリングやパーティーなど、複数のメニューを用意できるように構成します。

最後に LEFT JOIN と COALESCE を使用していることに注目してください。

Restaurant
id
restaurantname

Menu
id
menuname   e.g. Breakfast, Lunch, Dinner, Catering, Party, Special Cultural Holiday

Dish
id
dishname   

Ingredient
id
ingredientname

-- 料理には 1 つ以上の材料が含まれます

Dish_Ingredients
dishid
ingredientid

-- メニューには 1 つ以上の料理があります

MenuDish
menuid
dishid

-- レストランには 1 つ以上のメニューがあります

RestaurantMenu
restaurantid
menuid

-- レストランは食材の在庫を保持しています

RestaurantIngredients
restaurantid
ingredientid
quantityOnHand  

-- 左結合により、在庫にレコードがない食材を料理が要求する場合に NULL 値が返されます。したがって、COALESCE()

    select restaurantname, menuname, dishname, ingredientname, quantityOnHand
    from restaurant R 
    inner join restaurantmenu RM on R.id = RM.restaurantid
    inner join menu M on RM.menuid = M.id
    inner join menudish MD on MD.menuid = M.id
    inner join dish D on MD.dishid = D.id
    inner join dishingredient DI on DI.dishid = D.id
    inner join ingredients I on DI.ingredientid  = I.id

    LEFT JOIN

    restaurantingredients RI  on RI.ingredientid = I.id and RI.restaurantid = R.id   
    where Coalesce(quantityOnHand, 'none') as CurrentInventory
于 2013-02-25T14:12:22.333 に答える