关于左连接与内连接条件的sql语句

SELECT
    wr.app_userid AS serviceUserid,
    count(wwo.servicer_id) AS workOrderCount
FROM
wyy_role wr
    left JOIN (SELECT * FROM wyy_work_order
WHERE customer_order_status IN (1, 2)) as wwo ON wwo.servicer_id = wr.app_userid
WHERE
wr.role_type = 25
AND wr.app_userid IN ("4704c979aae04054b1c70cd0432faf64", "c8aa43d244e04773af31f1f3846eb8a3")
AND wr.is_dwline = 0
GROUP BY
    wr.app_userid ;

这是一个左关联语句。

查询结果如下:

 

SELECT
    wr.app_userid AS serviceUserid,
    count(wwo.servicer_id) AS workOrderCount
FROM
wyy_role wr
    left JOIN (SELECT * FROM wyy_work_order
WHERE customer_order_status IN (1, 2)) as wwo ON wwo.servicer_id = wr.app_userid
WHERE
wr.role_type = 25
AND wr.app_userid IN ("4704c979aae04054b1c70cd0432faf64", "c8aa43d244e04773af31f1f3846eb8a3")
AND wr.is_dwline = 0
AND wwo .is_delete = 0
GROUP BY
    wr.app_userid ;

查询结果如下:

 

两条sql语句区别:在下面的sql语句条件中有两个表的条件。即当你在条件中插入左关联的表字段的条件时,实际上是跟内连接的查询效果一样。要是想达到左连接的效果,条件就只能是主表的条件。

 

注意:聚合函数count()的三种用法:

1.COUNT(expr)

返回SELECT语句检索到的行中非NULL值的数目。  

若找不到匹配的行,则COUNT() 返回 0 。

2.COUNT(*)

COUNT(*) 的稍微不同之处在于,它返回检索行的数目, 不论其是否包含 NULL值。

SELECT 从一个表中检索,而不检索其它的列,并且没有 WHERE子句时, COUNT(*)被优化到最快的返回速度。例如:

mysql> SELECT COUNT(*) FROM student;

这个优化仅适用于 MyISAM表, 原因是这些表类型会储存一个函数返回记录的精确数量,而且非常容易访问。对于事务型的存储引擎(InnoDB, BDB), 存储一个精确行数的问题比较多,原因是可能会发生多重事物处理, 而每个都可能会对行数产生影响。

3.COUNT(DISTINCT expr,[expr...])

返回不同的非NULL值数目。

若找不到匹配的项,则COUNT(DISTINCT)返回 0 。

mysql> SELECT COUNT(DISTINCT results) FROM student;

在MySQL中, 你通过给定一个表达式列表而获取不包含NULL 不同表达式组合的数目。在标准 SQL中,你将必须在COUNT(DISTINCT ...)中连接所有表达式。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值