Oracle SQL: многократное использование предыдущего результата в выражении - PullRequest
1 голос
/ 12 января 2012

Я бы хотел добиться чего-то вроде этого:

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

Без выбора foo дважды.

Могу ли я сделать это с Oracle SQL? Будет ли это эффективнее, чем ВЫБРАТЬ дважды (или несколько раз)?

Ответы [ 4 ]

6 голосов
/ 12 января 2012

Как насчет

WITH
  foo      AS  select foo from table1
SELECT
    col1, col2 - foo.foo
FROM
    table2, foo
WHERE
   col2 > foo.foo
4 голосов
/ 12 января 2012

Вы можете написать это так:

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
1 голос
/ 12 января 2012
SELECT col1, col2 - foo
  FROM table2, table1
 WHERE col2 > foo

Но только если в таблице 1 есть 1 строка.

1 голос
/ 12 января 2012

Предполагая, что ваш подзапрос возвращает одну строку (в противном случае оба использования подзапроса вернут ошибки), просто выполните декартово объединение

SELECT a.col1, a.col2 - b.foo
  FROM table2 a,
       (SELECT foo FROM table1) b
 WHERE a.col2 > b.foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...