Я довольно новичок в SQL, и я создаю базу данных рецептов, которая принимает ингредиенты от пользователя и находит рецепты на основе ингредиентов.
У меня есть SQL-запрос, который получает имена рецептов, содержащих ингредиенты, но мне нужно выбрать рецепты, которые содержат ВСЕ ингредиенты и исключают дубликаты.
" SELECT recipes.Name, recipes.Preperation_Time, recipes.Author FROM recipes" +
" INNER JOIN RecipeIngredients ON RecipeIngredients.Recipe_ID = recipes.Recipe_ID" +
" INNER JOIN Ingredients ON Ingredients.Ingredient_ID = RecipeIngredients.Ingredient_ID" +
" WHERE ingredients.Name IN (" + ingredientString + ")");
Вот мои таблицы, если это поможет:
CREATE TABLE [dbo].[recipes]
(
[Recipe_ID] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR(MAX) NOT NULL,
[Instructions] TEXT NULL,
[Preperation_Time] FLOAT(53) NULL,
[Author] VARCHAR(MAX) 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])
);
CREATE TABLE [dbo].[Ingredients]
(
[Ingredient_ID] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
PRIMARY KEY CLUSTERED ([Ingredient_ID] ASC)
);
Спасибо.
ntext
,text
иimage
будут удалены в будущей версии SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые в настоящее время их используют. Вместо этого используйтеnvarchar(max)
,varchar(max)
иvarbinary(max)
. Подробности см. здесь - person marc_s   schedule 24.03.2019