sql查询子表状态全部完成的数据

这种需求你们都是怎么写sql的

举例来说有个订单表里面有5个订单

然后还有一个运单表

每个订单下可能有不同数量的运单

运单有一个状态是0和1

0代表未完成

一代表已完成

现在需求是把订单2和订单4查出来

因为他们下面

所有的运单都已经完成了

我们来看一下

好这个是单独查订单表有5条数据

那我们把运单也关联进来

我们用 left join

好然后我们也不需要这么多参数

只看

订单 id 和

运单状态

大家看:这数据就多了

一共12条数据

跟这个是一样的

那接下来呢

我们要想办法把订单2和订单4

查出来首先我们加一个分组

跟 rope by 我们按照订单 id 分组

也就是说同一个订单的运单放在一组

然后呢我们来看一下他们的数量

cut 星

接下来呢我们要想办法把

第二个订单和第四个订单找出来

那怎么找呢

我们可以利用他的这个状态值

让我们来看一下前三个订单(口误:运单)

大家看他们的 status 相加总和

他就是一

那第二个订单(的4个运单)呢

他们的 status 相加总和是4

正好跟他的数量是一样的

我们来看一下

sum bt.status

这里边只有2号和4号

他们的数量和他们的sum正好相等

所以呢我们可以用having

count *

等于 sum

bt.status

好我们再来看一下

大家看:只查出了2号和4号两个订单

也就是说:我们按照订单分组

然后取他们运单状态的总和

如果等于他们运单的数量

那我们就把这条数据筛出来

所以这块,如果我们还需要其他参数

比如:订单编号

我们可以把这些参数加进来

订单地址

那我们也可以在这查出来

好这样就可以了

最后更新于