2010-05-11 5 views
0

하나의 id (자동 번호) 필드와 50 개의 다른 필드가있는 테이블이 있습니다. 테이블이 정규화되었습니다.이 속성은 50 개의 재료 속성입니다.자세한 SQL INSERT INTO (..) 쿼리를 단순화하는 방법이 있습니까?

이 테이블의 레코드를 동일한 테이블에 복사하려고합니다. 자동 증가 ID 만 다릅니다. 내가 사용하고 쿼리는 지금은 두 번 모두 50 필드 이름을 입력해야

INSERT INTO tableName (field1,field2,....field50) 
SELECT field1,field2,....field50 from tableName 
WHERE autoid=1234; 

주입니다! 이 쿼리를 단축하여 모든 쿼리를 입력 할 필요가없는 방법이 있습니까?

감사합니다.

+0

간단한 임시 테이블을 사용해도 되니? – TerrorAustralis

답변

2

위의 답변을 보면, 주요 문제는 여기

insert into <tableName> select * from <tableName>이 가능한 솔루션에서 내 추측 할 경우 기본 키 위반을 얻을 것입니다 . 다음은 ID를 제거 할 필요가

ALTER TABLE #tempTable 
DROP COLUMN autoid 

그리고 단순히 다시 기본 테이블

INSERT INTO tableName 
SELECT * FROM #tempTable 

내가 그렇게있을 수 있습니다, SQLSERVER에서 건 아니에요을 중심으로 사이베이스와 협력하는 데에이 삽입 어떤 통사론적인 문제. 제발 저를 고쳐 주시면 제 대답을 바꿀 것입니다

+0

mysql을 사용하고 있습니다. #tmptable에 INSERT를 수행 할 수있는 방법이 없을 것 같습니다 (거기 있습니까?). 모든 필드가있는 "CREATE TEMPORARY TABLE"을 수행 한 다음 그 필드에 삽입해야합니다. –

+0

표준 SQL 구문은'SELECT [columns] INTO # Table'입니다. WHERE 절에 지정된 모든 데이터와 선택 항목에 지정된 모든 열을 가진 새 테이블 [#Table이라고합니다]을 작성해야하지만 MySQL doesnt는 이것을지지한다 (blog는 그것에 관해 약간의 절름발이 변명을 필요로하지 않고 준다). 이 구문을 사용하는 것이 좋습니다 :'CREATE TABLE #tempTable (SELECT * FROM TableName where autoid = 1234)'이것은 사실상 똑같은 일을해야합니다 – TerrorAustralis

2

당신은 말할 수 있습니다 : 당신이 테이블에 50 개 컬럼이있는 경우

INSERT INTO tableName 
SELECT * from tableName WHERE autoid=1234; 
+1

호기심에서 벗어나 AutoNumbered ID 열뿐 아니라 다른 항목을 삽입하여 기본 키 위반 가능성을 유발하지 않으시겠습니까? 그러나 국방부에서 OP에 게시 된 쿼리에는 모호성이있는 것으로 보이지만 AutoID는 ID가 아니라 Field1이라고 생각합니다. – TerrorAustralis

+0

예, autoId는 복사해야하는 필드 중 하나가 아닌 id 필드입니다. –

+0

나는 justins의 대답을 수정하고 게시했습니다. 단순히 값을 추출하고 ID를 제거한 다음 – TerrorAustralis

1
INSERT INTO tableName 
SELECT * from tableName 
WHERE autoid=1234; 

, 어쩌면 당신은 당신의 데이터베이스 디자인에 대해 다시 생각해야 하는가? 이 당신의 가치를 얻을 수

SELECT * 
INTO #tempTable 
FROM TableName 
WHERE autoid = 1234 

:

+2

나는 약 50 개의 필드가있는 하나 또는 두 개의 테이블을 가지고 있지 않은 응용 프로그램에서 일한 적이 없습니다. :) – Kip

+0

@Kip : 나는 그것이 좋은 것이 아니라고 확신한다. ;) – msw

+0

전혀 좋지 않다 :) – Randy

관련 문제