2016-04-27 2 views
0

Я выполнение следующее заявление:Как выбрать рецепты, для которых у меня есть ингредиенты?

SELECT DISTINCT 
    r.Recipe_Name 
FROM 
    USER u 
INNER JOIN 
    UserIngredient ui 
ON 
    u.User_ID = ui.User_ID 
INNER JOIN 
    RecipeIngredient ri 
ON 
    ui.Ingredient_ID = ri.Ingredient_ID 
INNER JOIN 
    Ingredient i 
ON 
    ri.Ingredient_ID = i.Ingredient_ID 
INNER JOIN 
    Recipe r 
ON 
    ri.Recipe_ID = r.Recipe_ID 
WHERE 
    u.User_Session = SessionID 

и получить каждый рецепт, который у меня есть по крайней мере один ингредиент для и не только рецепты, которые у меня есть все ингредиенты для. Мой стол-макет следующие:

CREATE TABLE User 
(
    User_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    User_Pass TEXT NOT NULL, 
    User_Name TEXT NOT NULL, 
    User_Surname TEXT NOT NULL, 
    User_EMail VARCHAR(255) UNIQUE, 
    User_Session VARCHAR(50) UNIQUE, 
    User_Admin BOOLEAN, 
    User_Newsletter BOOLEAN 
); 
CREATE TABLE Recipe 
(
    Recipe_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    Recipe_Name VARCHAR(255) UNIQUE NOT NULL, 
    Recipe_Clicks INT, 
    Recipe_Description TEXT, 
    Recipe_Image VARCHAR(255) DEFAULT 'https://placehold.it/400x500' 
); 
CREATE TABLE Ingredient 
(
    Ingredient_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    Ingredient_Name VARCHAR(255) UNIQUE, 
    Ingredient_Description TEXT 
); 
CREATE TABLE RecipeIngredient 
(
    RecipeIngredient_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    RecipeIngredient_Amount DECIMAL(8,2) NOT NULL, 
    MeasuringUnit_ID INT NOT NULL, 
    Recipe_ID INT NOT NULL, 
    Ingredient_ID INT NOT NULL, 
    FOREIGN KEY (MeasuringUnit_ID) REFERENCES MeasuringUnit(MeasuringUnit_ID), 
    FOREIGN KEY (Recipe_ID) REFERENCES Recipe(Recipe_ID), 
    FOREIGN KEY (Ingredient_ID) REFERENCES Ingredient(Ingredient_ID) 
); 
CREATE TABLE UserIngredient 
(
    UserIngredient_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    Ingredient_ID INT NOT NULL, 
    User_ID INT NOT NULL, 
    FOREIGN KEY(Ingredient_ID) REFERENCES Ingredient(Ingredient_ID), 
    FOREIGN KEY(User_ID) REFERENCES User(User_ID) 
); 

В результате я получаю:

я получаю каждый рецепт, который у меня есть один ингредиент

Результат я хочу:

Все рецепты, которые я имеют ВСЕ ингредиенты.

Here мой SQL файл

+2

Уход поделиться некоторыми выборочные данные и некоторые примеры выхода из запроса, который возвращает все – Matt

+0

Если middletable рецепт пуст вы надеваете» t хотите показать этот рецепт? –

+0

@Matt sure: https://github.com/Sven-Niehus/cocktail-database/blob/master/SQL/cocktails.sql –

ответ

0

Попробуйте это:

SELECT DISTINCT r.Recipe_Name 
FROM Recipe r 
CROSS JOIN User u 
WHERE 
    (SELECT COUNT(*) 
    FROM RecipeIngredients ri 
    LEFT OUTER JOIN UserIngredient ui 
    ON ri.Recipe_ID = ui.Recipe_ID 
    AND ri.Ingredient_ID = ui.Ingredient_ID 
    AND ui.User_ID = u.User_ID 
    WHERE ui.UserIngredient_ID IS NULL) = 0 
+0

Извините, что мне потребовалось столько времени, чтобы ответить, но у меня не было времени проверить, будет ли это работать. К сожалению, это не дает мне желаемого результата –

Смежные вопросы