我正在努力解决如何对此进行查询。我有三张桌子……配料、食谱和商店。我正在尝试构建一个查询,该查询将告诉我可以从商店的可用原料中制作哪些食谱。我的桌子是:
mysql> SELECT * FROM 成分;
+----------+
| 编号 |
+----------+
| 苹果| 高分辨率照片| CLIPARTO
| 牛肉|
| 奶酪 |
| 鸡|
| 鸡蛋| 高分辨率照片| CLIPARTO
| 面粉|
| 牛奶|
| 意大利面|
| 糖|
| 番茄| 高分辨率照片| CLIPARTO
+----------+
10 行一组(0.00 秒)
mysql> 选择 * FROM 商店;
+------------+------------+
| 姓名 | 成分|
+------------+------------+
| 目标 | 苹果| 高分辨率照片| CLIPARTO
| 目标 | 鸡|
| 目标 | 面粉|
| 目标 | 牛奶|
| 目标 | 糖|
| 沃尔玛| 牛肉|
| 沃尔玛| 奶酪 |
| 沃尔玛| 面粉|
| 沃尔玛| 牛奶|
| 沃尔玛| 意大利面|
| 沃尔玛| 番茄| 高分辨率照片| CLIPARTO
+------------+------------+
11 行(0.00 秒)
mysql> 选择 * 从食谱;
+---------------+------------+
| 姓名 | 成分|
+---------------+------------+
| 苹果派| 高分辨率照片| CLIPARTO 苹果| 高分辨率照片| CLIPARTO
| 苹果派| 高分辨率照片| CLIPARTO 面粉|
| 苹果派| 高分辨率照片| CLIPARTO 牛奶|
| 苹果派| 高分辨率照片| CLIPARTO 糖|
| 芝士汉堡| 牛肉|
| 芝士汉堡| 奶酪 |
| 芝士汉堡| 面粉|
| 芝士汉堡| 牛奶|
| 炸鸡| 鸡|
| 炸鸡| 面粉|
| 意大利面| 牛肉|
| 意大利面| 意大利面|
| 意大利面| 番茄| 高分辨率照片| CLIPARTO
+---------------+------------+
13 行一组(0.00 秒)
mysql>
鉴于上述情况,我想构建一个查询,在其中我给它提供商店名称(例如沃尔玛),它会生成我可以从沃尔玛(芝士汉堡和意大利面)的可用原料中制作的食谱列表。
下面是创建这些表的 SQL:
如果成分不存在则创建表(
id varchar(32) 非空,
主键(id)
) 引擎=InnoDB 默认字符集=latin1;
插入成分 (id) 值
('苹果'),
('牛肉'),
('起司'),
('鸡'),
('蛋'),
('面粉'),
('牛奶'),
('意大利面'),
('糖'),
('番茄');
CREATE TABLE IF NOT EXISTS recipes (
`name` varchar(32) NOT NULL,
成分 varchar(32) NOT NULL,
主键(`名称`,成分)
) 引擎=InnoDB 默认字符集=latin1;
插入食谱(`名称`,成分)值
('苹果派', '苹果'),
('苹果派', '面粉'),
('苹果派','牛奶'),
('苹果派', '糖'),
('芝士汉堡','牛肉'),
('芝士汉堡','奶酪'),
('芝士汉堡','面粉'),
('芝士汉堡','牛奶'),
('炸鸡', '鸡'),
('炸鸡','面粉'),
(“意大利面”,“牛肉”),
(“意大利面”,“意大利面”),
(“意大利面”,“番茄”);
CREATE TABLE IF NOT EXISTS 商店 (
`name` varchar(32) NOT NULL,
成分 varchar(32) NOT NULL,
唯一键名称_INGREDIENT(`名称`,成分)
) 引擎=InnoDB 默认字符集=latin1;
插入商店(`名称`,成分)值
('目标', '苹果'),
('目标', '鸡'),
('目标', '面粉'),
('目标','牛奶'),
('目标', '糖'),
('沃尔玛','牛肉'),
('沃尔玛','奶酪'),
('沃尔玛','面粉'),
('沃尔玛','牛奶'),
('沃尔玛','意大利面'),
(“沃尔玛”,“番茄”);