한 열에서 다른 열로 데이터 복사 (다른 테이블에 있음)


89

한 열에서 다른 테이블의 다른 열로 데이터를 복사하고 싶습니다. 어떻게 할 수 있습니까?

다음을 시도했습니다.

Update tblindiantime Set CountryName =(Select contacts.BusinessCountry From contacts) 

하지만 작동하지 않았습니다.

연락처 테이블의 "BusinessCountry"열을 tblindiantime 테이블의 "CountryName"열에 복사하고 싶습니다.


1
한 테이블에서 다른 테이블로 열을 복사하려면 테이블간에 일종의 관계가 필요합니다. 두 테이블에 공통 ID가 있습니까?
mdma 2010-07-29

1
어떤 데이터베이스와 버전을 사용하고 있습니까?
Mark Byers

답변:


89

SQL Server 2008에서는 다음과 같이 다중 테이블 업데이트를 사용할 수 있습니다.

UPDATE tblindiantime 
SET tblindiantime.CountryName = contacts.BusinessCountry
FROM tblindiantime 
JOIN contacts
ON -- join condition here

업데이트 할 행을 지정하려면 조인 조건이 필요합니다.

대상 테이블이 현재 비어 있으면 대신 INSERT를 사용해야합니다.

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

1
안녕하세요 UR 담당자에게 감사하지만 'IndianTime'열, 'tqms.dbo.tblindiantime'테이블에 NULL 값을 삽입 할 수 없다는 오류가 표시됩니다. 열은 널을 허용하지 않습니다. INSERT가 실패합니다. 그 진술서는 만료되었습니다.
Amit Patil

2
@AmitPatil-나는 이것이 오래되었다는 것을 알고 있지만 당신 같은 사람을 도울 수 있습니다. contact.BusinessCountry 대신 ISNULL (contacts.BusinessCountry, '')을 사용하면 문제가 해결됩니다. 기본적으로 null을 빈 문자열로 대체합니다.
Ankur-m

1
이 예에서는 "조인 조건"이 무엇인지 보여주지 않으므로 Michael Pakhantsov의 답변, cedrikdlb의 답변유사한 질문에 대한 Parveen의 답변 도 참조하십시오 . 여기서 두 열을 비교하여 올바른 행을 선택해야합니다 .
ToolmakerSteve

153

다음은 쿼리입니다.

같은 테이블 :

UPDATE table_name 
SET column1 = column2

다른 테이블 :

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );

13
질문의 맥락에서 잘못된 것은 asker가 특별히 2 개의 테이블을 포함하는 경우입니다.
bPratik 2013

2
열의 경우 mysql에서 작동하는 것은 동일한 테이블과 관련이 있습니다.
Satish Pandey 2013

11
그러나 이것은 내 문제를 해결하고 질문의 세부 사항과 일치하는 것 보다이 답변과 더 일치하는 질문 제목을 통해 여기에 왔습니다!
롭 그랜트

6
이 답변은 질문 자체보다는 질문 제목에 대한 답변입니다. 그래도 내가하려는 일에 유용하다는 것을 알았습니다.
wizard07KSU

1
이것은 훌륭한 대답입니다. 백업에서 하나의 열만 주 테이블로 복사하는 데 도움이되었습니다!
Zelter Ady

22

Table2.Column2 => Table1.Column1

나는이 질문이 오래되었다는 것을 알고 있지만 받아 들여진 대답은 나를 위해 작동하지 않았습니다. 미래의 Google 직원에게는 이것이 저에게 효과적이었습니다.

UPDATE table1 
    SET column1 = (
        SELECT column2
        FROM table2
        WHERE table2.id = table1.id
    );

이에 따라 :

  • table1 = 업데이트해야하는 열이있는 테이블
  • table2 = 데이터가있는 열이있는 테이블
  • column1 = column2의 데이터가 필요한 빈 열 (이것은 table1에 있음)
  • column2 = 데이터가있는 열 (즉, table2에 있음)

1
나를 위해 일했지만 위의 답변과 동일합니다.[Michael Pakhantsov]
Don Cheadle

3
@mmcra, 이제 위의 대답과 동일하다는 것이 맞습니다. 그러나 내가이 글을 쓴 당시와는 같지 않았다. 9 월에 편집되었고 오류가 수정되었음을 알 수 있습니다. 나는 6 월에이 코멘트를 썼다.
Kenny Grage 2016

16

키 필드가 두 개의 테이블이 있기를 바랍니다.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )

1
이것은 하나의 필드를 다른 하나의 필드로 바꾸는 경우에만 유효 ORA-01427: single-row subquery returns more than one row합니다. 선택이 둘 이상의 행을 반환하면 발생합니다. 둘 이상의 행을 선택하고 이러한 값으로 열을 업데이트하려면 어떻게해야합니까?
Muhammad Bekette 2013 년

3
@Muhammad Ramahy, 업데이트 열에 중첩 테이블이 있습니까? 하위 쿼리에서 여러 행을 반환하면 Key는 Contacts 테이블의 PrimaryKey가 아닙니다. 복합 기본 키가있는 경우 WHERE 절에 대한 조건 만 필요합니다.
Michael Pakhantsov 2013 년

1
나는 "키 필드가 두 테이블입니다 당신이 희망"당신이 무슨 뜻인지 이해가 안 돼요
마르코 Lackovic

2
@Krige-그는 "두 테이블에 각 테이블의 어떤 행이 다른 테이블의 행과 일치하는지 식별하는 공유 키 필드가있는 경우"를 의미 합니다 . 그렇지 않은 경우 이후의 내용을 변경해야합니다 WHERE. tblindiantime 필드가있는 경우 예를 들어, ContactID은 IS, ID행의를에 contacts있는 tblindiantime의 각 행에 속해, 당신은 사용합니다 WHERE tblindiantime.ContactID=contacts.ID. 다른 변형에 대해서는 cedrikdlb의 답변 을 참조하십시오 .
ToolmakerSteve

8

비슷한 질문의 답변 이이 질문의 선택된 답변 (Mark Byers에 의해) 보다 더 정확하게 작동했습니다 . Mark의 대답을 사용하여 업데이트 된 열은 모든 행에서 동일한 값을 얻었습니다 (아마도 조인과 일치하는 첫 번째 행의 값). 다른 스레드의 ParveenaArora의 답변을 사용하여 올바른 값으로 열을 업데이트했습니다.

이 질문의 테이블 및 열 이름을 사용하도록 Parveena의 솔루션을 변환하면 쿼리는 다음과 같습니다 (테이블이 tblindiantime.contact_id를 통해 관련되어 있다고 가정합니다).

UPDATE tblindiantime
SET CountryName = contacts.BusinessCountry
FROM contacts
WHERE tblindiantime.contact_id = contacts.id;

3

이전의 모든 답변이 정확하다고 생각합니다. 아래 코드는 한 번에 여러 행을 업데이트해야하는 경우 특히 매우 유효합니다. 참고 : PL / SQL입니다.

DECLARE
    CURSOR myCursor IS 
      Select contacts.BusinessCountry 
      From contacts c WHERE c.Key = t.Key;
    ---------------------------------------------------------------------
BEGIN
    FOR resultValue IN myCursor LOOP
        Update tblindiantime t
        Set CountryName=resultValue.BusinessCountry 
        where t.key=resultValue.key;
    END LOOP;
END;

도움이 되었으면합니다.


2

이제 Management Studio 2016으로 더 쉬워졌습니다.

SQL Server Management Studio 사용

한 테이블에서 다른 테이블로 데이터를 복사하려면

1. 테이블을 마우스 오른쪽 단추로 클릭 한 다음 디자인 을 클릭하여 복사 할 열과 복사 할 열이있는 테이블을 엽니 다 .

2. 복사 할 열이있는 테이블의 탭을 클릭하고 해당 열을 선택합니다.

3. Edit 메뉴에서 Copy를 클릭합니다 .

4. 새 쿼리 편집기 창을 엽니 다.

5. Query Editor를 마우스 오른쪽 버튼으로 클릭 한 다음 Design Query in Editor 를 클릭 합니다.

6. 테이블 추가 대화 상자에서 원본 및 대상 테이블을 선택하고 추가를 클릭 한 다음 테이블 추가 대화 상자 를 닫습니다 .

7. 쿼리 편집기의 빈 영역을 마우스 오른쪽 단추로 클릭하고 유형 변경 을 가리킨 다음 결과 삽입 을 클릭 합니다.

8. Choose Target Table for Insert Results 대화 상자에서 대상 테이블을 선택합니다.

9. Query Designer 상단에서 소스 테이블의 소스 열을 클릭합니다.

10. 이제 쿼리 디자이너가 INSERT 쿼리를 생성했습니다. 확인을 클릭하여 쿼리를 원래 쿼리 편집기 창에 배치합니다.

11. 쿼리를 실행하여 원본 테이블의 데이터를 대상 테이블에 삽입합니다.

추가 정보 https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine


1

다른 속성을 사용하여 해결할 수 있습니다.

  • 셀 컨트롤 클릭 이벤트를 사용합니다.
  • 다른 열로 전치 할 열 값을 선택하십시오.
  • 선택한 값을 다른 텍스트 상자 또는 레벨로 편리하게 채우고 선택한 속성을 수정하는 보완 버튼으로 보냅니다.
  • 데이터베이스에 대해 전체 스택을 업데이트하고 SQL 쿼리로 알고리즘을 만들어이를 극복하여 다른 열로 전치하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.