Объединение нескольких строк и столбцов из нескольких таблиц SQL в одну строку - PullRequest
0 голосов
/ 07 мая 2020

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

select * from CocktailName;
+----------+-------------+
| RecipeID | RecipeName  |
+----------+-------------+
| 1        | Bahama Mama |
+----------+-------------+

select * from Juices;
+----------+-----------------+-------------+
| RecipeID | JuiceName       | JuiceAmount |
+----------+-----------------+-------------+
| 1        | Orange Juice    | 30ml        |
| 1        | Pineapple Juice | 30ml        |
+----------+-----------------+-------------+

У меня есть еще 3 таблицы с названиями «Духи», «Фрукты» и «Сиропы», все они отформатированы как и моя таблица соков выше, и все они имеют столбец RecipeID, который служит внешним ключом для столбца RecipeID из моей таблицы CocktailName.

Моя проблема в том, что когда у меня есть рецепты, содержащие несколько ингредиент (например, в моей таблице выше рецепт Bahama Mama содержит два типа соков), мой запрос возвращает следующий ответ:

+-------------+------------+--------------+-----------+-------------+-----------------+-------------+-----------+-------------+
| RecipeName  | SpiritName | SpiritAmount | SyrupName | SyrupAmount | JuiceName       | JuiceAmount | FruitName | FruitAmount |
+-------------+------------+--------------+-----------+-------------+-----------------+-------------+-----------+-------------+
| Bahama Mama | Rum        | 30ml         | Grenadine | 15ml        | Orange Juice    | 30ml        | N/A       | N/A         |
| Bahama Mama | Rum        | 30ml         | Grenadine | 15ml        | Pineapple Juice | 30ml        | N/A       | N/A         |
+-------------+------------+--------------+-----------+-------------+-----------------+-------------+-----------+-------------+

Мой вопрос: есть ли способ вернуть мой результат как:

RecipeName| SpiritName | SpiritAmount| SyrupName| SyrupAmount| JuiceName| JuiceAmount|JuiceName| JuiceAmount| FruitName| FruitAmount

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

Мой запрос:

select distinct CocktailName.RecipeName, Spirits.SpiritName, Spirits.SpiritAmount, Syrups.SyrupName, 
Syrups.SyrupAmount, Juices.JuiceName, Juices.JuiceAmount, Fruits.FruitName,Fruits.FruitAmount from 
CocktailName join Spirits join Syrups join Juices join Fruits join UserIngredients on 
Spirits.SpiritName like UserIngredients.Ingredient and Spirits.RecipeID = CocktailName.RecipeID or 
Syrups.SyrupName like UserIngredients.Ingredient and Syrups.RecipeID = CocktailName.RecipeID or
Juices.JuiceName like UserIngredients.Ingredient and Fruits.RecipeID = CocktailName.RecipeID or
Fruits.FruitName like UserIngredients.Ingredient and Fruits.RecipeID = CocktailName.RecipeID where 
UserIngredients.UserID = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...