【发布时间】:2014-04-08 10:10:14
【问题描述】:
我正在使用此查询来获取结果,其中Calander(主键:DAY_DATE)包含有关时间的所有连续信息(即日期、季度、年份等),EXPENCE 和 INCOME 都有列TXN_DATE 作为DAY_DATE 的外键。
SELECT
COALESCE(t1."FISCAL_YEAR",t2."FISCAL_YEAR") "FISCAL_YEAR" ,
"exp" "exp" ,
"rev" "rev"
FROM
(SELECT
Calander.FISCAL_YEAR "FISCAL_YEAR" ,
(SUM("EXPENCE"."TXN_AMT" )) "exp"
FROM
Calander ,
EXPENCE
WHERE
"EXPENCE"."TXN_DATE"="Calander"."DAY_DATE"
GROUP BY
FISCAL_YEAR ) t1 FULL OUTER JOIN (SELECT
Calander.FISCAL_YEAR "FISCAL_YEAR" ,
(SUM("INCOME"."TXN_AMT" )) "rev"
FROM
Calander ,
INCOME
WHERE
"INCOME"."TXN_DATE"="Calander"."DAY_DATE"
GROUP BY
FISCAL_YEAR ) t2 ON
t1."FISCAL_YEAR"=t2."FISCAL_YEAR"
ORDER BY
COALESCE(t1."FISCAL_YEAR",t2."FISCAL_YEAR")
现在为了让查询更容易理解,我这样做了
SELECT
FISCAL_YEAR "FISCAL_YEAR" ,
(sum("EXPENCE"."TXN_AMT" )) "exp",
(sum("INCOME"."TXN_AMT" )) "rev"
FROM
Calander ,
EXPENCE FULL OUTER JOIN INCOME ON
"EXPENCE"."TXN_DATE" = "INCOME"."TXN_DATE"
WHERE
"EXPENCE"."TXN_DATE"="Calander"."DAY_DATE" and
"INCOME"."TXN_DATE"="Calander"."DAY_DATE"
GROUP BY
FISCAL_YEAR
ORDER BY
FISCAL_YEAR
我在两个查询中得到相同的结果。无论如何结果会有所不同(Ist查询结果是正确的结果)吗? 会对性能产生什么影响?
【问题讨论】:
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已随 ANSI-92 SQL 标准(超过 20 年前)
-
@marc_s 知道为什么人们今天仍然在使用这种风格,尽管到处都不鼓励它?老实说,我对此很好奇。
-
@usr: 恐怕很多教练都不是真正的最新的,而是教“旧”的风格——或者只是纯粹的懒惰“已经这样做了 20 年...... ...”
标签: sql sql-server query-optimization