답변:
자동 증분 열에 삽입하고 값을 지정할 수 있습니다. 이건 괜찮아; 자동 증분 생성기를 무시합니다.
NULL 또는 0 또는 값을 삽입하려고 DEFAULT
하거나 INSERT 문의 열에서 자동 증가 열을 생략하면 자동 증가 생성기가 활성화됩니다.
따라서 INSERT INTO table1 SELECT * FROM table2
괄호가 필요하지 않습니다. 의 id 값이 있음을이 방법 table2
그대로 복사되며, table1
것 없는 새 값을 생성합니다.
당신이 경우 원하는 table1
새로운 가치를 생성하기 위해, 당신은 할 수 없다 SELECT *
. id 열에 null 또는 0을 사용하십시오.
INSERT INTO table1 SELECT 0, col1, col2, col3, ... FROM table2;
또는 INSERT 문의 열 목록과 SELECT 문의 선택 목록에서 열을 생략합니다.
-- No id in either case:
INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3, ... FROM table2;
묻기 전에 "select * one column을 제외하고"에 대한 구문이 SQL에 없습니다. 삽입하려는 열 이름의 전체 목록을 작성해야합니다.
select * from table
첫 번째 열을 제거하기 위해이 subresult를 조작 할 방법이 없습니까?
select *
의미 할 수 있는지 묻습니다 select * except for the first column
. 대답은 '아니오. select *
항상 해당 테이블에서 모든 열을 요청 합니다. 부분 집합을 원하면 원하는 열을 철자해야합니다.
선택의 id는 테이블에 삽입 된 것과 동일한 값이됩니다. 기존 행을 복제하려고하면 오류가 발생합니다.
Bill Karwin : 문의하기 전에 "select * 하나의 열을 제외하고"에 대한 구문은 SQL에 없습니다.
이것은 몇 가지 창의력으로 달성 할 수 있습니다.
SET @sql = CONCAT('INSERT INTO <table> SELECT null,
', (SELECT GROUP_CONCAT(COLUMN_NAME)
FROM information_schema.columns
WHERE table_schema = '<database>'
AND table_name = '<table>'
AND column_name NOT IN ('id')), '
from <table> WHERE id = <id>');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
그러면 새 행이 선택한 행의 ID 대신 자동 증분 ID를 얻습니다.