我想实现这样的目标:
SELECT col1,col2-(SELECT foo FROM table1)
FROM table2
WHERE col2>(SELECT foo FROM table1)
未选择foo
两次。
我可以使用Oracle SQL吗? 它会比SELECTing两次(或多次)更有效吗?
答案 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行时。