2016-05-14 81 views
0

我有這樣的選擇:SQL與其他別名工作選擇

SELECT 
*, 
(SELECT some_value FROM other_table) as a1, 
(SELECT some_value FROM other_table2) as a2 
FROM some_table; 

有沒有辦法使用的值A1,A2,並與他們這樣的工作嗎?

SELECT 
*, 
(SELECT some_value FROM other_table) as a1, 
(SELECT some_value FROM other_table2) as a2, 
a1+a2, 
a1/a2 
FROM some_table; 

這些子查詢是相當大的,所以它不是很好,如果我必須這樣做:

SELECT 
*, 
(SELECT some_value FROM other_table) as a1, 
(SELECT some_value FROM other_table2) as a2, 
(SELECT some_value FROM other_table)+(SELECT some_value FROM other_table), 
SELECT some_value FROM other_table)/(SELECT some_value FROM other_table2) 
FROM some_table; 

回答

1

使用WITH在Oracle中。這非常有幫助。 Link

WITH a1 AS (SELECT some_value FROM other_table), 
a2 AS (SELECT some_value FROM other_table2) 
SELECT * 
FROM some_table t 
JOIN a1 ON a1.key = t.key 
JOIN a2 ON a2.key = t.key 
0

嘗試

SELECT t.*, 
     a1.some_value + a2.some_value, 
     a1.some_value/a2.some_value 
FROM some_table t 
cross join (SELECT some_value FROM other_table) as a1 
cross join (SELECT some_value FROM other_table2) as a2 
0

一個標量集合可以被引入作爲一個行查詢,你再與所有其他查詢加盟。

WITH x AS 
(SELECT 
    (SELECT some_value FROM other_table) as a1, 
    (SELECT some_value FROM other_table2) as a2 
    FROM dual 
) 
SELECT t.*, x.a1 + x.a2 , x.a1 * x.a2 
FROM some_table t 
CROSS JOIN x;