SQL один к одному без связи

#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 в другом столбце, а затем из этих двух подвыборок вы можете присоединиться.