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.