Oracle SQL:在语句中多次使用先前的结果

时间:2012-01-12 11:50:36

标签: sql oracle

我想实现这样的目标:

SELECT col1,col2-(SELECT foo FROM table1) 
FROM table2 
WHERE col2>(SELECT foo FROM table1)

未选择foo两次。

我可以使用Oracle SQL吗? 它会比SELECTing两次(或多次)更有效吗?

4 个答案:

答案 0 :(得分:6)

怎么样

WITH
  foo      AS  select foo from table1
SELECT
    col1, col2 - foo.foo
FROM
    table2, foo
WHERE
   col2 > foo.foo

答案 1 :(得分:4)

你可以这样写:

SELECT
    s.col1, s.col2 - s.foo
FROM
(
    SELECT col1, col2, (SELECT foo FROM table1) as foo
    FROM table2
) s
WHERE s.col2 > s.foo

答案 2 :(得分:1)

假设您的子查询返回单行(否则,子查询的两次使用都会返回错误),只需执行笛卡尔连接

SELECT a.col1, a.col2 - b.foo
  FROM table2 a,
       (SELECT foo FROM table1) b
 WHERE a.col2 > b.foo

答案 3 :(得分:1)

SELECT col1, col2 - foo
  FROM table2, table1
 WHERE col2 > foo

但仅当table1有1行时。