我的表格:
表格1 练习 | primaryMuscleGroup | motionName | | ------------------ | -------------- ------| | 胸部 | 双杠臂屈伸 | | 胸部 | 卧推 | | 胸部 | 俯卧撑 | | 胸部 | 飞鸟 | | 腿部 | 深蹲 | | 腿部 | 弓步 | | 背部 | 硬拉 | 表格2 健身记录 | name | motionName | | ------------------ | -------------- ------| | 约翰·史密斯 | 双杠臂屈伸 | | 莎莉 | 深蹲 | | 华莱士 | 弓步 | | 克里斯托夫 | 硬拉 |
查询应该返回一个人没有做过的肌肉群的所有练习。例如,如果我们为客户“约翰·史密斯”运行查询,我们应该返回:
| primaryMuscleGroup | motionName | | 腿部 | 深蹲 | | 腿部 | 弓步 | | 背部 | 硬拉 |
如果我们为客户“莎莉”运行查询,我们应该返回:
| primaryMuscleGroup | motionName | | ------------------ | -------------- ------| | 胸部 | 双杠臂屈伸 | | 胸部 | 卧推 | | 胸部 | 俯卧撑 | | 胸部 | 飞鸟 | | 背部 | 硬拉 |
P粉6429198232023-09-15 19:56:41
您可以使用外连接或者使用not exists
来实现,看看下面的查询是否符合您的需求:
select * from exercises e where not exists ( select * from exercises x where exists ( select * from fitnessRecords fr where fr.name = 'john smith' and fr.motionName = x.motionName ) and x.primaryMuscleGroup = e.primaryMuscleGroup )
P粉3889454322023-09-15 12:46:32
雷雷
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=eb216b7579d5fcd0c0ab628717f3d676