sql — Oracle INSERT INTO с использованием SELECT

Задавать вопрос

спросил

Изменено 8 лет, 5 месяцев назад

Просмотрено 16 тысяч раз

Мне нужно продублировать некоторые строки столбцов в Oracle.

У меня есть таблица customer_address и столбец address_type , где 1 — адрес доставки, 2 — адрес доставки и т. д.

У меня есть эти столбцы, которые мне нужно продублировать:

 customer_no
Имя Клиента
customer_email
 

Например, на данный момент

 CUSTOMER_NO ADDRESS_TYPE CUSTOMER_NAME CUSTOMER_EMAIL
 ----------- ------------ ------------- --------------
 40 1 Электронная почта некоторых клиентов@somecustomer. com
 

, но я хочу

 CUSTOMER_NO ADDRESS_TYPE CUSTOMER_NAME CUSTOMER_EMAIL
 ----------- ------------ ------------- --------------
 40 1 Электронная почта некоторых клиентов@somecustomer.com
 40 2 Электронная почта некоторых клиентов@somecustomer.com
 

Возможно ли это сделать?

Обновление

Спасибо за ответ @a_horse_with_no_name, но когда я запрашиваю таблицу, результаты кажутся странными, я дважды получаю имена столбцов, это правильно или я пропустил что-то, что вызвало это?

Например,

 выберите customer_no, address_type, customer_name, customer_email
от клиента_адрес
где клиент_номер = 40;
 

показывает

 CUSTOMER_NO ADDRESS_TYPE CUSTOMER_NAME CUSTOMER_EMAIL
 ----------- ------------ ------------- --------------
 40 1 Электронная почта некоторых клиентов@somecustomer.com
 CUSTOMER_NO ADDRESS_TYPE CUSTOMER_NAME CUSTOMER_EMAIL
 ----------- ------------ ------------- --------------
 40 2 Электронная почта некоторых клиентов@somecustomer.
com

Спасибо

  • sql
  • oracle
 вставить в customer_address (customer_no, address_type, customer_name, customer_email)
выберите клиент_номер,
       2,
       Имя Клиента,
       customer_email
от клиента_адрес
где клиент_id = 40
  и тип_адреса = 1;
совершить;
 

Полное описание синтаксиса INSERT см. в руководстве:

http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9014.htm#SQLRF01604

2

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Оператор SELECT INTO TEMP TABLE в SQL Server

В этой статье мы рассмотрим оператор SELECT INTO TEMP TABLE, его синтаксис и детали использования, а также приведите несколько простых базовых примеров, чтобы закрепить полученные знания.

Введение

Оператор SELECT INTO — это один из простых способов создать новую таблицу, а затем скопировать в нее данные исходной таблицы. только что созданная таблица. Другими словами, оператор SELECT INTO выполняет комбинированную задачу:

  • Создает таблицу-клон исходной таблицы с точно такими же именами столбцов и типами данных.
  • Читает данные из исходной таблицы
  • Вставляет данные во вновь созданную таблицу

Мы можем использовать оператор SELECT INTO TEMP TABLE для выполнения вышеуказанных задач в одном операторе для временного столы. Таким образом, мы можем быстро скопировать данные исходной таблицы во временные таблицы.

Синтаксис оператора SELECT INTO TEMP TABLE

ВЫБРАТЬ * | Column1, Column2… ColumnN

INTO #TempDestinationTable

FROM Source_Table

ГДЕ Условие

Аргументы SELECT INTO TEMP TABLE

  • Список столбцов: Мы можем использовать звездочку (*) для создания полной временной копии исходной таблицы или можем выбрать определенные столбцы исходной таблицы
  • Таблица назначения: Эта таблица ссылается на имя временной таблицы, в которую мы будем создавать и вставлять данные. Мы можем указать целевую таблицу как локальную или глобальную временную таблицу. Для локальной временной таблицы мы используем один знак решетки (#), а для глобальной временной таблицы мы используем знак решетки (##).
  • Исходная таблица: Источник — это таблица, из которой мы хотим считать данные
  • Пункт Where: Мы можем использовать предложение where, чтобы применить фильтр к данным исходной таблицы.

В следующем примере мы вставим данные таблицы Location в таблицу #TempLocation. Другими словами, мы создаст временный клон таблицы Location.

ВЫБЕРИТЕ * INTO #TempLocation FROM Production.Location

GO

SELECT * FROM #TempLocation

Как мы видим, оператор SELECT INTO создает таблицу #TempLocation, а затем вставляет в нее данные таблицы Location.

Когда мы хотим вставить определенные столбцы таблицы Location во временную таблицу, мы можем использовать следующее запрос :

SELECT LocationID, Name, ModifiedDate INTO #TempLocationCol FROM Production. Location

GO

SELECT * FROM #TempLocationCol

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

SELECT LocationID AS [TempLocationID],

Имя AS [TempLocationName] ,ModifiedDate  AS [TempModifiedDate]

INTO #TempLocationCol FROM Production.Location

GO

90C 90C SELECT * FROM 08

В то же время мы можем отфильтровать некоторые строки Location, а затем вставить набор результатов во временную таблицу. следующий запрос фильтрует строки, в которых столбец имени начинается с символа «F», а затем вставляет наборы результатов во временную таблицу.

SELECT LocationID, Name, ModifiedDate INTO #TempLocationCon FROM Production. Location

WHERE Name LIKE ‘F%’

GO

SELECT * FROM #TempLocationCon

INSERT INTO SELECT vs SELECT INTO TEMP TABLE

Оператор INSERT INTO SELECT считывает данные из одной таблицы и вставляет их в существующую таблицу. Например, если мы хотим скопируйте данные таблицы Location во временную таблицу с помощью инструкции INSERT INTO SELECT, мы должны указать временную таблицу явно, а затем вставить данные.

1

2

3

4

5

6

7

8

0 1 0 3

0 9

3 002 11

12

13

— Объявить временную таблицу —

CREATE TABLE #CopyLocation(

    LocationID smallint  NOT NULL,

    Name nvarchar(50) NOT NULL,

    2     Доступность десятичная (8, 2) НЕ НУЛЕВОЕ,

    ModifiedDate datetime NOT NULL)

 

— Копировать данные во временную таблицу —

    INSERT INTO #CopyLocation

    SELECT * FROM Production.

Location

— Выберите данные из временной таблицы

— 9000 —

    ВЫБЕРИТЕ * ИЗ #CopyLocation

На самом деле, эти два утверждения выполняют одну и ту же задачу разными способами. Однако они имеют некоторые отличия в сценарии их использования.

ВСТАВИТЬ В ВЫБОР

ВЫБЕРИТЕ

Требуется явно объявить целевую временную таблицу. Таким образом, это позволяет гибко изменять типы данных столбца и возможность создавать индексы.

Автоматически создает целевую временную таблицу.

Благодаря гибкости определения типов данных столбцов позволяет передавать данные из разных таблиц.

Он может создать резервную копию таблицы с простым синтаксисом.

SELECT INTO TEMP TABLE производительность

Оператор SELECT INTO TEMP TABLE выполняет две основные задачи в контексте производительности, а именно:

  • Чтение данных из исходных данных
  • Вставка данных во временную таблицу

Производительность операции чтения данных зависит от производительности запроса select, поэтому нам необходимо оценить производительность процесс чтения данных в этой области. Однако конфигурация базы данных tempdb повлияет на производительность оператора вставки. В SQL 2014 операторы SELECT … INTO выполняются параллельно, поэтому они показывают лучшую производительность. Теперь давайте проанализируем следующий план выполнения запроса.

ВЫБЕРИТЕ SalesOrderID, CarrierTrackingNumber, ModifiedDate

INTO #TempsSalesDetail FROM Sales. SalesOrderDetail

ЗАКАЗ ПО SalesOrderID

1- Оператор Clustered Index Scan считывает все данные из первичного ключа таблицы SalesOrderDetail и передает все данные в таблицу оператора вставки.

2- Оператор Table Insert добавляет новые данные во временную таблицу и выполняет эту операцию параллельно. способ. Эту ситуацию можно отобразить в атрибуте Фактическое количество строк. Поток 0 не показывает никаких значений потому что это поток координатора.

Оператор Gather Stream объединяет несколько параллельных операций в одну операцию. В этом плане выполнения запроса мы использовали предложение ORDER BY, но мы не видим никакого оператора в плане выполнения. В то же время Оператор Clustered Index Scan не возвращает результат в отсортированном виде. Причина этого пункта в том, что нет гарантия порядка вставки строк в таблицу.

Заключение

В этой статье мы изучили синтаксис и детали использования оператора SELECT INTO TEMP TABLE.