在线等,,LEFT JOIN问题,,着急

zhuzhusex9982 2013-09-04 09:45:18
SELECT
PC_DESC,
NVL(ROUND(CALL_DUR,0),0) AS CALL_DUR,
A.LOCALNET
FROM
APP_THRESHOLD_LOCALPC A
LEFT JOIN UN_F_CDR_DPCTRAF_15 B ON A.PC_DESC = B.DPC_DESC
AND DAY_ID = 20130904
AND HOUR_ID = 8
AND MI_ID = 30

SELECT
PC_DESC,
NVL(ROUND(CALL_DUR,0),0) AS CALL_DUR,
A.LOCALNET
FROM
APP_THRESHOLD_LOCALPC A
LEFT JOIN UN_F_CDR_DPCTRAF_15 B ON A.PC_DESC = B.DPC_DESC
WHERE 1=1
AND DAY_ID = 20130904
AND HOUR_ID = 8
AND MI_ID = 30


这两个结果不一样!!! 请问业务上有什么区别

...全文
75 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2013-09-04
  • 打赏
  • 举报
回复
这两个语句肯定不一样,第一句left join 不管右表条件是否符合,都会全部出来,而第二句,先过滤掉where条件,当然包括右表的条件,然后再左连
  • 打赏
  • 举报
回复
SQL Select语句完整的执行顺序: 

1、from子句组装来自不同数据源的数据; 
2、where子句基于指定的条件对记录行进行筛选; 
3、group by子句将数据划分为多个分组; 
4、使用聚集函数进行计算; 
5、使用having子句筛选分组; 
6、计算所有的表达式; 
7、使用order by对结果集进行排序。 


另外:一个查询语句各个部分的执行顺序: 
--8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
--(1)  FROM <left_table> 
--(3)    <join_type> JOIN <right_table> 
--(2)      ON <join_condition> 
--(4)  WHERE <where_condition> 
--(5)  GROUP BY <group_by_list> 
--(6)  WITH {CUBE | ROLLUP} 
--(7)  HAVING <having_condition> 
--(10) ORDER BY <order_by_list> 

--如果你写到where后面了  那么跟写到on后面的执行顺序是不一样的,所以不是同一个业务的查询语句

on是关联条件,比where筛选条件先执行的

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧