시도해 보세요:
INSERT INTO table1 ( column1 )
SELECT col1
FROM table2
이것은 표준 ANSI SQL이며 모든 DBMS에서 작동해야 합니다.
에서 확실히 작동합니다:
@Shadow_x99: 이렇게 하면 정상적으로 작동하며 여러 열과 다른 데이터도 가질 수 있습니다:
INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT table2.column1, table2.column2, 8, 'some string etc.'
FROM table2
WHERE table2.ID = 7;
편집: 이 구문은 Access, SQL 2000/2005/Express, MySQL 및 PostgreSQL에서만 사용했으므로 해당 구문도 다루어야 한다는 점을 언급해야 합니다. 한 댓글 작성자가 SQLite3에서도 작동한다고 지적했습니다.
제가 본 두 가지 답변은 특히 Informix에서 잘 작동하며 기본적으로 표준 SQL입니다. 즉, 표기법입니다:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
표기는 Informix와 모든 DBMS에서 잘 작동합니다. (5년 이상 전만 해도 MySQL이 항상 이런 표기법을 지원하지는 않았지만, 지금은 이런 종류의 표준 SQL 구문을 제대로 지원하며, 이 표기법에서도 정상적으로 작동합니다.) 열 목록은 선택 사항이지만 대상 열을 순서대로 표시하므로 SELECT 결과의 첫 번째 열은 나열된 첫 번째 열 등으로 이동합니다. 열 목록이 없는 경우 SELECT 결과의 첫 번째 열은 대상 테이블의 첫 번째 열로 이동합니다.
시스템마다 다를 수 있는 것은 서로 다른 데이터베이스의 테이블을 식별하는 데 사용되는 표기법입니다. 이 표준은 데이터베이스 간(DBMS 간은 말할 것도 없고) 작업에 대해서는 아무 것도 언급하지 않습니다. Informix에서는 다음 표기법을 사용하여 테이블을 식별할 수 있습니다:
[dbase[@server]:][owner.]table
즉, 데이터베이스를 지정하고 해당 데이터베이스가 현재 서버에 없는 경우 선택적으로 해당 데이터베이스를 호스팅하는 서버를 식별한 다음 선택적으로 소유자, 점, 마지막으로 실제 테이블 이름을 지정할 수 있습니다. SQL 표준에서는 Informix에서 소유자라고 부르는 것에 스키마라는 용어를 사용합니다. 따라서 Informix에서는 다음 표기법 중 하나로 테이블을 식별할 수 있습니다:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
일반적으로 소유자는 따옴표로 묶을 필요가 없지만, 따옴표를 사용하는 경우 대소문자를 구분하여 소유자 이름의 철자를 정확하게 입력해야 합니다. 즉:
someone.table
"someone".table
SOMEONE.table
는 모두 동일한 테이블을 식별합니다. Informix를 사용하면 소유자 이름이 일반적으로 대문자로 변환되는 MODE ANSI 데이터베이스에 약간의 복잡성이 있습니다(Informix는 예외). 즉, (일반적으로 사용되지 않는) MODE ANSI 데이터베이스에서는 다음과 같이 작성할 수 있습니다:
CREATE TABLE someone.table ( ... )
라고 쓰면 시스템 카탈로그의 소유자 이름은 'SOMEONE'이 아니라 'SOMEONE'이 됩니다. 소유자 이름을 큰따옴표로 묶으면 구분된 식별자처럼 작동합니다. 표준 SQL에서는 구분 식별자를 여러 곳에서 사용할 수 있습니다. 다른 컨텍스트에서는 작은따옴표로 묶인 문자열은 문자열로, 큰따옴표로 묶인 문자열은 구분 식별자로 구분하지 않고 작은따옴표와 큰따옴표 문자열을 모두 문자열로 취급합니다. (물론 완전성을 위해 어떤 값으로도 설정할 수 있는 환경 변수 DELIMIDENT가 있지만, 큰따옴표는 항상 구분된 식별자를, 작은따옴표는 항상 문자열을 둘러싸도록 설정하는 것이 가장 안전합니다.)
MS SQL Server에서는 대괄호로 묶인 [구분 식별자]를 사용한다는 점에 유의하세요. 제가 보기에는 이상해 보이며 확실히 SQL 표준의 일부가 아닙니다.
우리가 원하는 내용을 추가할 때 첫 번째 오토메이티드 불과 레코드는유지합니다 다른 테이블 (예제에서와 하나만):
INSERT INTO TABLE1
(COLUMN1, COLUMN2, COLUMN3, COLUMN4)
VALUES (value1, value2,
(SELECT COLUMN_TABLE2
FROM TABLE2
WHERE COLUMN_TABLE2 like "blabla"),
value4);
지정하지 않고 '이 이뤄질 수 있는 열 경우 모든 열의 값을 삽입하십시오' '선택' 일부 부품을 공급하고 있다.
INSERT INTO table1
SELECT col1, col2
FROM table2
이 작동하지 않을 (가치 "에 대한 col2 '지정되지 않은):
INSERT INTO table1
SELECT col1
FROM table2
테이블 열 때 간단한 삽입에서 e0100042.log 알려져 있다.
Insert into Table1
values(1,2,...)
간단한 삽입에서 거론하며 열:
Insert into Table1(col2,col4)
values(1,2)
불크 삽입에서 선택한 여러 열 때 표 (# table2) 이 같은 삽입에서 표 (Table1)
Insert into Table1 {Column sequence}
Select * -- column sequence should be same.
from #table2
불크 삽입에서 삽입할지 salesforce. 원하는 열 때 만 표 (table1):
Insert into Table1 (Column1,Column2 ....Desired Column from Table1)
Select Column1,Column2..desired column from #table2
from #table2
두 방식 선택 시 삽입하십시오 서브쿼리.
1. 를 위한 하나의 결과를 반환하는 row. 외곽진입 서브케리 선택 시
INSERT INTO <table_name> (<field1>, <field2>, <field3>)
VALUES ('DUMMY1', (SELECT <field> FROM <table_name> ),'DUMMY2');
이 경우, 서브쿼리 하나만 선택할 것으로 집계 결과 행일 되돌려줍니다 위치에 따라 같은 기능을 SQL 조건이거나 SUM, 맥스, 평균 상술합니다. 그렇지 않으면 투사 오류
2. 다중 되돌리기 위한 선택 시 서브케리 결과와 함께 rows. 외곽진입
INSERT INTO <table_name> (<field1>, <field2>, <field3>)
SELECT 'DUMMY1', <field>, 'DUMMY2' FROM <table_name>;
두 번째 사례는 모두 외곽진입 작동합니다.
insert into StudentCourseMap (StudentId, CourseId)
SELECT Student.Id, Course.Id FROM Student, Course
WHERE Student.Name = 'Paddy Murphy' AND Course.Name = 'Basket weaving for beginners'
(난 깨닫게 일치하는 이름 값을 얻을 수 있는 둘 이상의 수강생용 복귀하십시오 확장하지만 것. 일치하는 켜짐이 이외의 다른 한 때 필요한 Id 는 Id 가 아이디 열 및 알 수 없습니다.)
여기 다른 예로 소스가 사용하여 조롱했기 하나 이상의 테이블.
INSERT INTO cesc_pf_stmt_ext_wrk(
PF_EMP_CODE ,
PF_DEPT_CODE ,
PF_SEC_CODE ,
PF_PROL_NO ,
PF_FM_SEQ ,
PF_SEQ_NO ,
PF_SEP_TAG ,
PF_SOURCE)
SELECT
PFl_EMP_CODE ,
PFl_DEPT_CODE ,
PFl_SEC ,
PFl_PROL_NO ,
PF_FM_SEQ ,
PF_SEQ_NO ,
PFl_SEP_TAG ,
PF_SOURCE
FROM cesc_pf_stmt_ext,
cesc_pfl_emp_master
WHERE pfl_sep_tag LIKE '0'
AND pfl_emp_code=pf_emp_code(+);
COMMIT;
INSERT INTO Table1 (col1, col2, your_desired_value_from_select_clause, col3)
VALUES (
'col1_value',
'col2_value',
(SELECT col_Table2 FROM Table2 WHERE IdTable2 = 'your_satisfied_value_for_col_Table2_selected'),
'col3_value'
);
Microsoft SQL Server 에 대한 구문을 해석 내아기마저도 추천합니까 com/go/learn_fl_cs4_learningas2_kr com/service/serviceplans/solaris/10/http://www. MSDN. # 39 에 훨씬 더 쉽게 찾을 수 있는 구글 it&, 구문.
이 예에서는 시도하시겠습니까
>. Google: 사이트 삽입하십시오 microsoft.com
첫 번째 결과는 http://msdn.microsoft.com/en-us/library/ms174335.aspx 될 것입니다.
예를 스크롤하십시오 (선택하고 autoexec. 옵션을 사용하여 데이터를 다른 커넥터로부터 tables" 삽입하려면 ";) 힘들 경우 페이지 맨 위에 주어진 구문을 해석.
[ WITH <common_table_expression> [ ,...n ] ]
INSERT
{
[ TOP ( expression ) [ PERCENT ] ]
[ INTO ]
{ <object> | rowset_function_limited
[ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
}
{
[ ( column_list ) ]
[ <output Clause> ]
{ VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ]
| derived_table <<<<------- Look here ------------------------
| execute_statement <<<<------- Look here ------------------------
| <dml_table_source> <<<<------- Look here ------------------------
| DEFAULT VALUES
}
}
}
[;]
이렇게 하면 다른 RDBMS 적용할 수 있기 때문이다. 모든 제품에 대한 기억을 시점으로든지 없는 모든 구문 작용하게 된다.
사실 포지셔닝하십시오 다음 SQL Server 2008년:
SELECT Table1.Column1, Table1.Column2, Table2.Column1, Table2.Column2, 'Some String' AS SomeString, 8 AS SomeInt
INTO Table3
FROM Table1 INNER JOIN Table2 ON Table1.Column1 = Table2.Column3
따라서 추가하는 단계 (), 방금 설정되었습니다 삽입하십시오 테이블의 값을 선택할 검색하기를.
select *
into tmp
from orders
하지만, t # 39 는 좋은 경우에만 사용할 수 있는 임시 doesn& (tcpg 정보기술 (it) 과 칠합니다). (SQL 서버)
기존 삽입하려면 table: tmp
set identity_insert tmp on
insert tmp
([OrderID]
,[CustomerID]
,[EmployeeID]
,[OrderDate]
,[RequiredDate]
,[ShippedDate]
,[ShipVia]
,[Freight]
,[ShipName]
,[ShipAddress]
,[ShipCity]
,[ShipRegion]
,[ShipPostalCode]
,[ShipCountry] )
select * from orders
set identity_insert tmp off