INSERT INTO ... SELECT с несколькими столбцами SELECT - PullRequest
0 голосов
/ 09 октября 2018

Спасибо за ваше время.

У меня есть настройка INSERT INTO ... SELECT, но я также хочу отфильтровать, используя дополнительные столбцы (которых нет в таблице, в которую я вставляю)

Например:

INSERT INTO table1 (t1_col1, t1_col2, t1_col3)
SELECT
  t2.t1_col1,
  t2.t1_col2,
  t3.t1_col3,
  t4.filter_col
FROM table2 t2
  INNER JOIN table3 t3 ON t2.t1_col1 = t3.t1_col1
  INNER JOIN table4 t4 ON t4.filter_col = t2.filer_col
WHERE t4.filter_col = 'value';

table1 имеет только столбцы t1_col1 , t1_col2 и t1_col3 таккогда я пытаюсь запустить его, он терпит неудачу, как и ожидалось:

ERROR:  INSERT has more expressions than target columns

Поэтому мой вопрос заключается в том, как я могу все еще включить фильтр, но указать, какие столбцы из моего оператора SELECT следует использовать в операторе INSERT INTO.

Большое спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Это почти правильно, но вы выбираете один столбец слишком много.Попробуйте это:

INSERT INTO table1 (t1_col1, t1_col2, t1_col3)
SELECT
  t2.t1_col1,
  t2.t1_col2,
  t3.t1_col3
FROM table2 t2
  INNER JOIN table3 t3 ON t2.t1_col1 = t3.t1_col1
  INNER JOIN table4 t4 ON t4.filter_col = t2.filer_col
WHERE t4.filter_col = 'value';
0 голосов
/ 09 октября 2018

у вас должно быть такое же количество столбцов в select, поэтому удалите t4.filter_col из выделения

INSERT INTO table1 (t1_col1, t1_col2, t1_col3)
SELECT
  t2.t1_col1,
  t2.t1_col2,
  t3.t1_col3      
FROM table2 t2
  INNER JOIN table3 t3 ON t2.t1_col1 = t3.t1_col1
  INNER JOIN table4 t4 ON t4.filter_col = t2.filer_col
WHERE t4.filter_col = 'value';

Примечание: вы не обязаны выбирать все столбцы, которые вы использовали в объединении или фильтре

...