首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联接和相关子查询

联接和相关子查询
EN

Stack Overflow用户
提问于 2017-05-28 18:50:57
回答 4查看 60关注 0票数 1

无法确定查询的情况,在这种情况下,我希望仅显示具有未验证订单的客户,但不包括已至少具有一个已验证订单的客户。一个客户可以在数据库中有更多的记录,因为对于每个订单,在customers表中也会有新的记录,所以跟踪特定用户的唯一方法是通过customer_number。

我的数据库结构(简化版):

代码语言:javascript
复制
customers:
id | customer_number

orders:
id | customer_id | isVerified

我可能需要组合连接和相关查询(在customers表中搜索每个customer_number的记录,并检查isVerified列中的false),这最终可能会非常慢,特别是对于数以千计的记录。

我使用Laravel,所以如果这可以让事情变得更容易,那么可以使用雄辩的ORM。

(再想一想:或者重写该部分,以便只为特定用户的订单创建一条用户记录,可能会更快、更高效。)

有什么想法吗?谢谢你

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-05-28 19:25:59

可能有几种方法可以做到这一点,但您可以通过连接、聚合和条件求和来实现此结果:

代码语言:javascript
复制
select  a.customer_id,
        sum( case when isVerified = 1 then 1 else 0 end ) as Num_Verified,
        sum( case when isVerified = 0 then 1 else 0 end ) as Num_unVerified
from    customers as a
        left join
        orders as b
        on a.customer_id = b.customer_id
group by a.customer_id
having  Num_Verified = 0
        and Num_unVerified > 0

SQLfiddle here

票数 1
EN

Stack Overflow用户

发布于 2017-05-28 19:29:00

你可以像这样实现:

代码语言:javascript
复制
$customer_id = Customer::join('orders','customers.id','orders.cutomer_id')
             ->where('isVerified',true)
             ->select('orders.*')
             ->groupBy('customer_id')
             ->pluck('customer_id');

这将为客户提供至少一个经过验证的订单。

现在,通过以下方式获取具有未经验证订单的客户:

代码语言:javascript
复制
$customers = Customer::join('orders','customers.id','orders.customer_id')
             ->where('isVerified',false)
             ->whereNotIn('customer_id',$customer_id)
             ->select('customers.customer_number','orders.*')
             ->groupBy('customer_id')
             ->pluck('customer_id');
票数 1
EN

Stack Overflow用户

发布于 2017-05-28 19:27:47

这个怎么样?

代码语言:javascript
复制
$customer_list = customers::where('customer_number',$customer_number)->with('orders',function($query){
$query->where('isVerified',0);
})->get();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44226437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档