2015-04-24 6 views
0

Я немного оглянулся, но не мог найти ничего, что, как я полагал, может помочь, поэтому я спрашиваю здесь. Я знаю Microsoft SQL довольно хорошо, но не PostgreSQL, и, пытаясь сделать мой запрос PostgreSQL, я сразу застрял и понял, что у меня будет много упражнений, прежде чем я смогу выполнить свой запрос, поэтому попрошу о помощи здесь.PostgreSQL перемещает данные из одной таблицы в другую с условиями

Так что мне нужна помощь в

  1. Выберите строку из таблицы А
  2. Извлечение значения столбца из 1. и сохранить его в переменной
  3. Выберите все строки из таблицы B в переменная
  4. для каждой строки в 3. принять эту строку, изменить его, и вставить его в таблице С

причиной шага 1. и 2. является becau se Мне нужно получить значение, которое содержит счетчик, который мне нужно использовать для создания идентификаторов, которые я применяю к шагу 4. Поэтому сначала мне нужно получить этот идентификатор и сохранить одно значение в переменной. Затем для каждой строки в таблице B мне нужно изменить значение столбца id с новым и улучшенным идентификатором. Было бы также признательно, если бы я мог получить помощь с полным заявлением всего от начала до конца. Например, я даже не успел объявить функцию, которая возвращает значение трудно закодированного VarChar ...

Благодарности

+1

Я не вижу необходимости в шаге 1,2, учитывая ваши шаги 3 и 4. Возможно, вам не хватает выражения некоторой логики. Все, что вам нужно сделать, можно получить с помощью функции. Нет необходимости в каких-либо переменных. –

+0

Это не о вкусе базы данных ... все дело в «логике» и SQL-экспертизе. Если вы можете решить это в SQLServer, вы можете сделать это и в Postgres ... просто используйте «простой» sql. – Christian

+0

Можете ли вы разместить здесь, что вы пробовали? – rcdmk

ответ

2

Try думать в простой SQL:

INSERT INTO target 
SELECT as_is_col1, as_is_col2, 
     mod_col1*10, 
     mod_col2||' extra text', 
     row_number() OVER() AS rn 
    FROM source 
WHERE wanted_col BETWEEN 100 AND 500; 

Check the docs. Конечно, количество выбранных столбцов и их типы должны совпадать с количеством столбцов, в которые вы вставляете.

Я использую функцию окна row_number() здесь, чтобы перебирать строки. Это устраняет необходимость итераций.

+0

Мне нужно сохранить значение с шага 1. в переменной, чтобы я мог увеличивать ее значение на одну для каждой строки, которую я выбираю в таблице B, следовательно, запрос цикла на этапе 4. – Rebam1

+0

@ Rebam1, вы может имитировать итерацию либо с помощью функции окна '' row_number() ') (http://www.postgresql.org/docs/current/interactive/functions-window.html), либо [' generate_series() '] (http://www.postgresql.org/docs/current/interactive/functions-srf.html) установить функцию возврата. Выберите то, что вам больше нравится. – vyegorov

Смежные вопросы