Вставка из нескольких таблиц, несколько строк - PullRequest
1 голос
/ 06 мая 2019

Я пытался решить свою проблему, но не смог найти ответ. Oracle db.

У меня есть таблица context со следующим:

| contextId | customer |
 ----------------------
|         1 | John     |
|         2 | David    |

У меня есть другая таблица , настройка :

| contextId | settingName | settingValue |
 ----------------------------------------
|         1 | Happiness   |            6 |
|         1 | Sadness     |            3 |

Я хотел бы вставить Дэвида в setting , копируя settingName и settingValue Джона (contextId = 1).

Результат должен выглядеть так:

| contextId | settingName | settingValue |
 ----------------------------------------
|         1 | Happiness   |            6 |
|         1 | Sadness     |            3 |
|         2 | Happiness   |            6 |
|         2 | Sadness     |            3 |

Спасибо

Ответы [ 3 ]

4 голосов
/ 06 мая 2019
INSERT INTO SETTING
  SELECT (SELECT CONTEXTID FROM CONTEXT WHERE CUSTOMER = 'DAVID'),
         SETTINGNAME,
         SETTINGVALUE
    FROM SETTING
   WHERE CONTEXTID = 1
1 голос
/ 06 мая 2019

Если вы хотите использовать имена клиентов 'David' и 'John', тогда вам нужно объединение:

INSERT INTO SETTING (CONTEXTID, SETTINGNAME, SETTINGVALUE)
  SELECT 
    (SELECT CONTEXTID FROM CONTEXT WHERE CUSTOMER = 'David'),
    s.SETTINGNAME,
    s.SETTINGVALUE
  FROM CONTEXT AS c INNER JOIN SETTING AS s 
  ON s.CONTEXTID = c.CONTEXTID
  WHERE c.CUSTOMER = 'John'
0 голосов
/ 06 мая 2019

Объявлена ​​отдельная переменная для хранения contextId из customer - David. И вставка нескольких значений, доступных в таблице setting для customer - David.

DECLARE
  l_contextId context.contextId%TYPE;
BEGIN

  SELECT
    contextId
  INTO
    l_contextId
  FROM
    context
  WHERE
    customer = 'David';

END; 


INSERT INTO setting
(contextId, settingName, settingValue)
SELECT l_contextId, settingName, settingValue
FROM setting
WHERE contextId = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...