#sql #oracle #subquery
#sql #Oracle #подзапрос
Вопрос:
Используя Oracle 11
, я хочу извлечь данные из таблицы и добавить столбец вычисляемых значений, которые поступают из инструкции подзапроса.
Пример Таблицы1 является:
COLUMN1: COLUMN2:
1 Group1
3 Group2
5 Group3
6 Group4
Подзапрос возвращает разные значения каждый раз, когда выполняется запрос, но ради этого примера давайте скажем, что он возвращает эти значения:
2
4
7
8
Что мне нужно, так это объединить результаты
COLUMN1: COLUMN2: COLUMN3: (subquery - order does NOT matter)
1 Group1 2
3 Group2 4
5 Group3 7
6 Group4 8
Но поскольку подзапрос вычисляется с каждой строкой, возвращаемой из таблицы, все, что я получаю, это.
COLUMN1: COLUMN2: COLUMN3:
1 Group1 2
3 Group2 2
5 Group3 2
6 Group4 2
Я не могу придумать, как связать таблицу и подзапрос, я пытался играть с ROWNUM, но безуспешно.
Обновить
SELECT GD.*, N
FROM patrongroupsdesc GD,
(SELECT n
FROM patrongroupsdesc GD2,
(SELECT n, ROWNUM
FROM ( SELECT ROWNUM n
FROM DUAL
CONNECT BY LEVEL <= 100)
WHERE n >= 1) SUB
WHERE SUB.n = GD2.groupid( ) AND GD2.groupid IS NULL) SUB2
таблица PATRONGROUPSDESC отформатирована следующим образом
groupid (NUMBER)
description (VARCHAR2)
...other data
SUB возвращает значения 1-100
SUB2 возвращает пробелы в номерах идентификаторов групп
Я по существу дублирую все данные в этой таблице, за исключением одного столбца
Комментарии:
1. Можете ли вы включить SQL, который вы пробовали до сих пор?
2. Покажите свой SQL, тогда мы сможем помочь
Ответ №1:
Сначала вы должны знать, что если у вас нет ORDER BY
предложения, то порядок результатов не имеет никакой гарантии вообще.
Затем вы можете сделать:
WITH first_table AS (select *, ROWNUM AS rn FROM ...)
, secnd_table AS (select *, ROWNUM AS rn FROM ...)
SELECT first_table.*, secnd_table.*
FROM first_table INNER JOIN secnd_table USING (rn)
Хитрость здесь в том, что ROWNUM
присваивается в результате, вытекающем из SELECT
инструкции. Поэтому, если вы хотите вставить таблицы, подобные этой, вы должны ВЫБРАТЬ из своих таблиц и сохранить rownum в другом столбце, а затем из этих двух подвыборок вы можете присоединиться.