Oracle SQL:在语句中多次使用以前的结果
我想实现这样的目标:Oracle SQL:在语句中多次使用以前的结果,sql,oracle,Sql,Oracle,我想实现这样的目标: SELECT col1,col2-(SELECT foo FROM table1) FROM table2 WHERE col2>(SELECT foo FROM table1) 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 不选
SELECT col1,col2-(SELECT foo FROM table1)
FROM table2
WHERE col2>(SELECT foo FROM table1)
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
不选择foo
两次
我可以用Oracle SQL实现这一点吗?
它会比选择两次(或多次)更有效吗?您可以这样写:
SELECT col1,col2-(SELECT foo FROM table1)
FROM table2
WHERE col2>(SELECT foo FROM table1)
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
你可以这样写:
SELECT col1,col2-(SELECT foo FROM table1)
FROM table2
WHERE col2>(SELECT foo FROM table1)
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
假设您的子查询返回一行(否则,两次使用子查询都会返回错误),只需执行笛卡尔连接即可
SELECT a.col1, a.col2 - b.foo
FROM table2 a,
(SELECT foo FROM table1) b
WHERE a.col2 > b.foo
假设您的子查询返回一行(否则,两次使用子查询都会返回错误),只需执行笛卡尔连接即可
SELECT a.col1, a.col2 - b.foo
FROM table2 a,
(SELECT foo FROM table1) b
WHERE a.col2 > b.foo
怎么样
WITH
foo AS select foo from table1
SELECT
col1, col2 - foo.foo
FROM
table2, foo
WHERE
col2 > foo.foo
怎么样
WITH
foo AS select foo from table1
SELECT
col1, col2 - foo.foo
FROM
table2, foo
WHERE
col2 > foo.foo
但前提是表1有一行
但前提是表1只有一行。表1中真的只有一行吗?如果不是,这两个表之间的关系是什么?表1中真的只有一行吗?如果不是,两个表之间的关系是什么?+1 WITH子句是为了在多个位置重复使用子查询而明确提供的。请注意,在这种情况下,它实际上只在一个位置使用(在笛卡尔连接中)。但是,这可能是因为示例已经简化,而WITH是一件值得了解的事情。+1 WITH子句明确提供的目的是在多个位置重复使用子查询。请注意,在这种情况下,它实际上只在一个位置使用(在笛卡尔连接中)。然而,这可能是因为该示例已被简化,并且需要了解。