MySQL : SQL 쿼리의 각 결과에 대한 레코드를 삽입하는 방법은 무엇입니까?


84

내가 선택했다고 말해

SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo';

일부 레코드를 반환합니다.

결과 세트에서 도달 행에 대한 삽입을 어떻게 할 수 있습니까?

INSERT INTO config (id, customer_id, domain) VALUES (@id, @customer_id, 'www.example.com');

여기서 @id및 @customer_id결과 집합의 행의 필드는?

편집 : 나는 그것을 복제하고 싶지 않았지만 domain대신 필드에 새 값을 삽입하십시오 . 그럼에도 불구하고 평범한 얼굴 손바닥 상황 ;-) 감사합니다!


선택한 레코드를 복제 하시겠습니까?
— ethrbunny 2011 년

같은 테이블의 레코드를 같은 테이블에 다시 삽입하는 이유는 무엇입니까? 이것은 중복을 생성합니다
— Sachin Shanbhag 2011 년

죄송합니다 여러분,이 질문은 꽤 어리 석었습니다. 저는 아주 간단한 문제가있는 facepalm에
— acme

모든 사람은 때때로 질문에 답할 친구가 필요합니다. 귀하의 노력에 감사드립니다
— Jeff Fritz

나는 같은 문제가 있습니다. 예를 들어, 테이블이 설계된 방식으로 다른 사용자 항목을 복제해야하지만 새 사용자에게 복제해야하는 356 개의 레코드가 있습니다.
— Casey

답변:


160

다음과 같이 간단합니다.

INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, domain FROM config;

" www.example.com"을 도메인으로 원하는 경우 다음 을 수행 할 수 있습니다.

INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config;

1
그러나 이것은 domain'www.example.com' 으로 설정된 새 레코드를 삽입하지 않으며 단순히 모든 항목을 복제합니다.
— acme 2011 년

당신이 맞아요 - 그것은이 한 간단이다 - 간단한 문제에 대한 간단한 솔루션 마른 세수의 감사 ;-)
— 절정

이 hah를 보관하기 위해 복잡한 조인을 작성하려고했습니다. 감사합니다! 더 쉬울 수 없습니다.
— C4d

2
당신은 광산의 편집 팀 :-) 상대 템플릿 변화의 몇 주 동안 저장 한
— 아르 템 Ankudovich

다행 @ArtemAnkudovich 내가 도움이 될 수있다 :
— krtek

7
INSERT INTO config (id, customer_id, domain)
SELECT id, customer_id, 'www.example.com' FROM (
  SELECT DISTINCT id, customer_id, domain FROM config
  WHERE type = 'foo'
) x;

1
이와 같은 하위 쿼리를 수행 할 필요가 없습니다. 다른 답변 확인
— krtek 2011 년

Krtek : 정확히 어떤 대답을 제안하십니까? 4 개의 다른 답변이 있는데 각각은 어떤면에서 잘못되었습니다.
— Ken

어떤 방식으로 잘못 되었습니까? 적어도 내 두 번째 쿼리와 Jeff Fritz의 쿼리는 당신과 같은 결과를 가지고 있습니다.
— krtek 2011 년

1
Krtek : 테이블에 레코드 (1,1, "a", "foo") 및 (1,1, "b", "foo")가있는 경우 질문의 첫 번째 쿼리는 (1,1, "a "), (1,1,"b "), 요청한대로 레코드 (1,1,"example.com ")를 두 번 삽입해야합니다. 귀하의 답변은 문자열 리터럴 "example.com"과 구별되므로 (1,1, "example.com")은 한 번만 삽입됩니다.
— 켄

5
INSERT INTO Config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config

이 구문에 대한 MySQL 설명서는 다음과 같습니다.

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html


감사합니다. 각 필드를 복제하고 싶지 않았습니다. '도메인'필드가 달라야합니다. 그러나 그럼에도 불구하고 간단하고 나는이 어리석은 문제에 갇혀 있었다.
— acme 2011 년

4

편집 -@Krtek의 답변에 대한 의견을 읽은 후.

삽입 대신 업데이트를 요청하는 것 같습니다.

update config set domain = 'www.example.com'

이렇게하면 중복 항목을 만들지 않고 도메인이 'www.example.com'인 구성 테이블의 모든 기존 레코드가 업데이트됩니다.

오래된 답변 -

다음과 같이 사용할 수 있습니다.

INSERT INTO config (id, customer_id, domain)
select id, customer_id, domain FROM config

참고 :-ID가 기본 키로 있으면 작동하지 않습니다.


감사합니다. 각 필드를 복제하고 싶지 않았습니다. '도메인'필드가 달라야합니다. 그러나 그럼에도 불구하고 간단하고 나는이 어리석은 문제에 갇혀 있었다.
— acme 2011 년

@acme-insert를 사용하면 반드시 결과를 복제하고 id를 기본 키로 표시 한 경우 행을 삽입 할 수도 없습니다.
— Sachin Shanbhag 2011 년

-6

다음 SQL 문을 실행합니다.

-- Do nothing.

"config"에서 고유 한 행을 선택하고 동일한 행을 동일한 테이블에 삽입하려고합니다. 그들은 이미 거기에 있습니다. 할 것이 없다.

실제로 "도메인"열의 일부 또는 모든 값을 업데이트하려는 경우가 아니면. 실제로 뭔가를 한 UPDATE 문이 필요합니다.


3
내 대답은 분명히 유머러스하고 OP는 얼굴 손바닥을 인정합니다. 조금도 부끄럽지 않습니다.
— Mike Sherrill 'Cat Recall'2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.