网站目录管理系统模板,自己做小程序开个社区团购,南宁网络企业网站,企业网站代维护场景#xff1a;
现在存在一对多关系#xff0c;蓝色的盒子装的篮球#xff0c;黄的的盒子装的黄球#xff0c; 黑色的盒子 #xff08;模拟工作类似场景#xff09;
boxIdballId蓝盒ID-15蓝盒ID-16蓝盒ID-17黄盒ID-212黄盒ID-215黄盒ID-216黑盒ID-38黑盒ID-39
需求
现在存在一对多关系蓝色的盒子装的篮球黄的的盒子装的黄球 黑色的盒子 模拟工作类似场景
boxIdballId蓝盒ID-15蓝盒ID-16蓝盒ID-17黄盒ID-212黄盒ID-215黄盒ID-216黑盒ID-38黑盒ID-39
需求
例如 6,715这三个球为坏球我现在不想查出这三个球以及他们所属的盒子的数据。
正常的left join where 实现不了这个效果。
select * from boxleft join Ball ON Box.id Ball.boxIdwhere Ball.boxId not in (6,7,15)查出的效果
boxIdballId蓝盒ID-15黄盒ID-212黄盒ID-216黑盒ID-38黑盒ID-39
但其实想要的效果是
boxIdballId黑盒ID-38黑盒ID-39
因为 6,7都属于蓝盒ID-1这个组67为坏球 只要蓝盒ID-1的数据我就要过滤掉
15 同理属于黄盒ID-2只要是黄盒ID-2的数据就要过滤掉。
所以 思路就是
先根据目标坏球 查出对应的盒子Id再根据盒子Id来过滤。
select box.id,* from boxleft join Ball ON Box.id Ball.boxIdwhere xxxand NOT EXISTS(select t.id from Ball t where t.id in (6,7,15) where t.id box.id)当然不用exist 用in也可以实现这里就是给出了一种解决思路。