我正在努力解决如何对此进行查询。我有三张桌子……配料、食谱和商店。我正在尝试构建一个查询,该查询将告诉我可以从商店的可用原料中制作哪些食谱。我的桌子是:
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; 插入商店(`名称`,成分)值 ('目标', '苹果'), ('目标', '鸡'), ('目标', '面粉'), ('目标','牛奶'), ('目标', '糖'), ('沃尔玛','牛肉'), ('沃尔玛','奶酪'), ('沃尔玛','面粉'), ('沃尔玛','牛奶'), ('沃尔玛','意大利面'), (“沃尔玛”,“番茄”);