Извлечение данных из отношения «многие ко многим» в базе данных рецептов - PullRequest
0 голосов
/ 22 марта 2019

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

CREATE TABLE [dbo].[Ingredients] (
[Ingredient_ID] INT          IDENTITY (1, 1) NOT NULL,
[Name]          VARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([Ingredient_ID] ASC)
);

CREATE TABLE [dbo].[recipes] (
[Recipe_ID]        INT          IDENTITY (1, 1) NOT NULL,
[Name]             VARCHAR (50) NOT NULL,
[Instructions]     TEXT         NULL,
[Preperation_Time] FLOAT (53)   NULL,
[Author]           VARCHAR (50) NULL,
CONSTRAINT [PK.recipes] PRIMARY KEY CLUSTERED ([Recipe_ID] ASC)
);

 CREATE TABLE [dbo].[RecipeIngredients] (
[Recipe_ID]     INT NOT NULL,
[Ingredient_ID] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Recipe_ID] ASC, [Ingredient_ID] ASC),
CONSTRAINT [FK_RecipeIngredients_To_Ingredients] FOREIGN KEY ([Ingredient_ID]) REFERENCES [dbo].[Ingredients] ([Ingredient_ID]),
CONSTRAINT [FK_RecipeIngredients_To_Recipes] FOREIGN KEY ([Recipe_ID]) REFERENCES [dbo].[recipes] ([Recipe_ID])
);

Я заполнил все таблицы и сейчас пытаюсь получить рецепты на основе введенных пользователем данных.

Я создал тестовый оператор SQL для извлечения всех рецептов, содержащих «яйца», используя:

string sqlString = "SELECT recipes.Name, Instructions, recipes.Preperation_Time, Author FROM RecipeIngredients" +
                           " INNER JOIN recipes ON recipes.Recipe_ID = RecipeIngredients.Recipe_ID" +
                           " INNER JOIN Ingredients ON Ingredients.Ingredient_ID = RecipeIngredients.Ingredient_ID" +
                           " WHERE ingredients.Name = 'Eggs'";

Данные не отображаются в моем dataGridView, но я не уверен, так ли это, потому что это утверждение неверно или другие факторы.

Правильно ли утверждение? Я не знаком с командой INNER JOIN.

Я также не уверен, как разработать оператор Sql, который может принимать различное количество имен ингредиентов, не создавая оператор Sql для каждой возможности.

Заранее спасибо, если вам нужно, чтобы я расширил что-то, о чем я просил, пожалуйста, спросите.

1 Ответ

0 голосов
/ 23 марта 2019

Вот запрос, который должен работать. Рекомендуется использовать псевдонимы

SELECT r.Name, r.Instructions, r.Preperation_Time, r.Author 
FROM Ingredients i 
join RecipeIngredients ri on i.Ingredient_ID = ri.Ingredient_ID
join recipes r on ri.Recipe_ID = r.Recipe_ID
where i.Name = 'Eggs'

Возможно, вы захотите запустить его через SQL Server Management Studio, чтобы удостовериться в возвращаемости результата, прежде чем кодировать его в решении C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...