Как перебрать массив целых чисел в SQL - PullRequest
0 голосов
/ 17 октября 2019

У меня есть 3 таблицы SQL:

  • Первая: содержит коды [1 ... 22], и каждый код представляет значение. Этот список всегда фиксирован (без изменений) - я собираюсь назвать столбец Code1
  • Второй содержит также коды, и каждый раз, когда мы используем набор кодов икаждый код представляет значение - я собираюсь вызвать столбец Code2
  • Третья таблица имеет 2 столбца (2 FK) Code1 | Code2 из предыдущих таблиц

Мой вопрос заключается в том, что я хочу всегда выполнять итерацию по всем значениям столбца Code1 из первой таблицы (независимо от того, сколько у меня кодов) и по определенным / определенным значениям столбца Code2 извторая таблица, скажем, [30 .. 55]. Я хочу вставить Code1 и Code2 в третью таблицу.

Пример:

Table 1
Code1|Descript
1|A
2|B
3|C

Table 2
Code2|Descript
1|AA
2|BB
3|CC
4|DD
5|EE

Я хочу вставить в свою третью таблицу следующие значения

Table 3
Code1|Code2
1|2
1|3
1|4
2|2
2|3
2|4
3|2
3|3
3|4

По сути, просматривая каждое значение из таблицы 1 и для конкретных значений из таблицы 2 (в моем примере [2,3, 4]), я сделал запросы на вставку

Каков оптимальный способ выполнения этих запросов на вставку безнеобходимость создания запроса вставки для каждой отдельной записи?

Мое решение выглядит примерно так:

INSERT INTO T3 
   SELECT T1.Code1, T2.Code2
   FROM T1 CROSS JOIN (
       SELECT Code2
       FROM T2
       WHERE Code2 BETWEEN x and y)T2

Спасибо,

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

Оператор INSERT, в котором мы перекрестно соединяем две таблицы (выбирая диапазон во второй таблице, за которой вы следуете), должен решить эту проблему:

INSERT INTO table3
SELECT table1.code1, table2.code2
FROM table1, table2
WHERE table2.code2 BETWEEN 2 and 4

Если вы не хотите, чтобы дублирование ударялось table3 если отношения уже существуют, вы можете сделать что-то вроде:

INSERT INTO table3
SELECT table1.code1, table2.code2
FROM table1, table2
WHERE table2.code2 BETWEEN 2 and 4
   AND (table1.code1, table2.code2) NOT IN (SELECT code1, code2 FROM table3)
0 голосов
/ 17 октября 2019

Я думаю, что запрос должен быть перекрестным соединением, так как вам нужно, чтобы все строки из первой таблицы были соединены с определенными строками во второй таблице

INSERT INTO TABLE3 (code1, code2) 
     SELECT 
           T1.Code1, T2.Code2 
               FROM Table1 T1 CROSS JOIN Table2 T2
               ON T2.code2 IN(2,3,4)
0 голосов
/ 17 октября 2019
INSERT INTO TABLE3 (code1, code2) 
     SELECT 
           T1.Code1, T2.Code2 
               FROM Table1 T1 JOIN Table2 T2
               ON T2.code2 IN(2,3,4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...