在线等,,LEFT JOIN问题,,着急
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
这两个结果不一样!!! 请问业务上有什么区别
[解决办法]
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筛选条件先执行的