select (一个子查询) a
from b(可能a表 与 b表有一定的关系 是指他们有可能产生连接)子查询是一个 select ....... from ......... 的语句。想问一下 这样的select 语句是怎样执行的呀!
能详细的解释一下吗!
谢谢各位大侠了 有这方面的资料也行 学习!
能给举个例子 就更好了呀! 谢谢各位了呀!
from b(可能a表 与 b表有一定的关系 是指他们有可能产生连接)子查询是一个 select ....... from ......... 的语句。想问一下 这样的select 语句是怎样执行的呀!
能详细的解释一下吗!
谢谢各位大侠了 有这方面的资料也行 学习!
能给举个例子 就更好了呀! 谢谢各位了呀!
y.hkd_total_amt hkd_total_amt_12
FROM (SELECT ROUND(sgp.po_ccy) hkd_total_amt
FROM apps.suga_group_purchase_details sgp
WHERE sgp.order_date > ADD_MONTHS (TRUNC (SYSDATE), -3)
GROUP BY sgp.subsidary, sgp.supplier_name
ORDER BY 1, 4 DESC) x,
(SELECT ROUND(sgp.po_ccy) hkd_total_amt
FROM apps.suga_group_purchase_details sgp
WHERE sgp.order_date > ADD_MONTHS (TRUNC (SYSDATE), -12)
GROUP BY sgp.subsidary, sgp.supplier_name
ORDER BY 1, 4 DESC) y
WHERE (x.subsidary(+) = y.subsidary AND x.supplier_name(+) = y.supplier_name)这样的例子可以吗?
反正都一样,整个SQL肯定是先执行最里面的select,也就是说由内到外执行。
如上例:
先执行
SELECT ROUND(sgp.po_ccy) hkd_total_amt
FROM apps.suga_group_purchase_details sgp
WHERE sgp.order_date > ADD_MONTHS (TRUNC (SYSDATE), -3)
GROUP BY sgp.subsidary, sgp.supplier_name
ORDER BY 1, 4 DESC
在数据库内产生个临时表 x
然后
SELECT ROUND(sgp.po_ccy) hkd_total_amt
FROM apps.suga_group_purchase_details sgp
WHERE sgp.order_date > ADD_MONTHS (TRUNC (SYSDATE), -12)
GROUP BY sgp.subsidary, sgp.supplier_name
ORDER BY 1, 4 DESC
产生个临时表 y
最后用两个临时表x,y作为外面的查询基表。最外层可以简化成这样。
SELECT x.hkd_total_amt hkd_total_amt_3,
y.hkd_total_amt hkd_total_amt_12
FROM x,y
WHERE (x.subsidary(+) = y.subsidary AND x.supplier_name(+) = y.supplier_name)不知道楼主能看明白吗?