2010-07-29 98 views
59

Tôi muốn sao chép dữ liệu từ cột này sang cột khác của bảng khác. Làm thế nào tôi có thể làm điều đó?Sao chép dữ liệu từ cột này sang cột khác (nằm trong một bảng khác)

tôi thử như sau:

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

nhưng nó đã không làm việc.

Tôi muốn sao chép cột "BusinessCountry" của bảng liên hệ vào cột "CountryName" của bảng tblindiantime.

+0

Để sao chép cột từ một bảng khác, bạn cần một số loại mối quan hệ giữa các bảng. Hai bảng có ID chung không? – mdma

+0

Bạn đang sử dụng cơ sở dữ liệu và phiên bản nào? –

Trả lời

60

Trong SQL Server 2008 bạn có thể sử dụng một bản cập nhật nhiều bảng như sau:

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

Bạn cần một điều kiện tham gia để xác định các hàng sẽ được cập nhật.

Nếu bảng mục tiêu hiện đang trống thì bạn nên sử dụng một INSERT thay vì:

INSERT INTO tblindiantime (CountryName) 
SELECT BusinessCountry FROM contacts 
+0

Xin chào thankx cho đại diện ur nhưng nó cho tôi thấy lỗi sau Không thể chèn giá trị NULL vào cột 'IndianTime', table 'tqms.dbo.tblindiantime'; cột không cho phép null. INSERT không thành công. Tuyên bố đã bị chấm dứt. –

+1

@AmitPatil - Tôi biết điều này là cũ nhưng có thể giúp một người như bạn. Sử dụng ISNULL (contacts.BusinessCountry, '') thay vì chỉ contacts.BusinessCountry và nó sẽ giải quyết vấn đề của bạn. Về cơ bản chúng tôi thay thế null bằng một chuỗi rỗng. –

+0

Vì ví dụ này không cho thấy "điều kiện tham gia" có thể là gì, cũng xem câu trả lời của Michael Pakhantsov và câu trả lời của [cedrikdlb] (http://stackoverflow.com/a/25674132/199364) và [Câu trả lời của Parveen cho câu hỏi tương tự, trong đó hai cột phải được so sánh để chọn hàng chính xác] (http://stackoverflow.com/a/17350703/199364). – ToolmakerSteve

12

Hy vọng bạn có lĩnh vực quan trọng là hai bảng.

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

điều này chỉ hợp lệ nếu bạn thay thế một trường bằng một trường khác, nó sẽ ném 'ORA-01427: truy vấn con một hàng trả về nhiều hàng' nếu chọn trả về nhiều hàng, nếu tôi muốn chọn nhiều hơn một hàng và cập nhật cột với các giá trị này? –

+2

@Muhammad Ramahy, Bạn có bảng lồng nhau trong cột cập nhật không? trong truy vấn con trả về một vài hàng, sau đó Khóa không phải là PrimaryKey cho bảng danh bạ. Nếu bạn có khóa chính kết hợp, bạn chỉ cần điều kiện để mệnh đề WHERE. –

+0

Mã hoàn hảo, hy vọng điều này sẽ được chấp nhận trả lời –

101

đây truy vấn:

Cùng Bảng:

UPDATE table_name 
SET column1 = column2 

Bảng khác nhau:

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

Sai trong ngữ cảnh của câu hỏi, trong đó người hỏi đặc biệt liên quan đến 2 bảng. – bPratik

+1

Làm việc cho mysql trong trường hợp các cột liên quan đến cùng một bảng. –

+9

Điều này tuy nhiên giải quyết vấn đề của tôi, và tôi đã ở đây thông qua tiêu đề câu hỏi mà có lẽ phù hợp với câu trả lời này nhiều hơn nó phù hợp với các chi tiết trong câu hỏi! –

1

Tôi nghĩ rằng tất cả các câu trả lời trước là chính xác, dưới đây đang rất hợp lệ đặc biệt nếu bạn phải cập nhật nhiều hàng cùng một lúc, lưu ý: đó là PL/S QL

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; 

Tôi ước điều này có thể hữu ích.

7

A similar question's answer hoạt động chính xác hơn cho tôi hơn this question's selected answer (bởi Mark Byers). Sử dụng câu trả lời của Mark, cột được cập nhật của tôi có cùng giá trị trong tất cả các hàng (có thể là giá trị từ hàng đầu tiên khớp với tham gia). Sử dụng câu trả lời của ParveenaArora từ chủ đề khác đã cập nhật cột với các giá trị chính xác.

Chuyển đổi giải pháp Parveena để sử dụng câu hỏi 'bảng và cột này tên, truy vấn sẽ như sau (nơi tôi giả định các bảng có liên quan thông qua tblindiantime.contact_id):

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

Nó có thể được giải quyết bằng cách sử dụng thuộc tính khác.

  • Sử dụng ô Kiểm soát sự kiện nhấp chuột.
  • Chọn giá trị cột mà bạn chuyển sang cột anther.
  • gửi giá trị đã chọn đến hộp văn bản khác hoặc cấp độ bất cứ điều gì bạn điền thuận tiện và nút bổ sung để sửa đổi thuộc tính đã chọn.
  • cập nhật toàn bộ ngăn xếp cơ sở dữ liệu và tạo thuật toán với truy vấn sql để khắc phục sự cố này để chuyển đổi nó sang cột khác.
13

Table2.Column2 => Table1.Column1

Tôi nhận ra câu hỏi này là cũ nhưng câu trả lời chấp nhận không làm việc cho tôi. Đối với nhân viên của Google trong tương lai, đây là những gì làm việc cho tôi:

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

Nhờ đó mà:

  • table1 = bảng mà đã cột mà cần phải được cập nhật
  • table2 = bảng có cột với dữ liệu
  • cột1 = cột trống cần dữ liệu từ cột2 (đây là trong bảng 1)
  • column2 = cột có dữ liệu (có trong bảng 2)
+0

Làm việc cho tôi - nhưng cũng giống như câu trả lời ở trên bởi '[Michael Pakhantsov]' – mmcrae

+1

Bạn nói đúng, @mmcra, rằng bây giờ nó giống như câu trả lời ở trên. Tuy nhiên, nó không giống như lúc tôi viết bình luận này. Bạn sẽ nhận thấy rằng nó đã được chỉnh sửa vào tháng 9 và các lỗi đã được sửa. Tôi đã viết bình luận này vào tháng Sáu. –

0

Bây giờ thật dễ dàng hơn với studio quản lý năm 2016.

Sử dụng SQL Server Management Studio

Để sao chép dữ liệu từ một bảng khác

1.Open bảng với các cột bạn muốn sao chép và thứ bạn muốn sao chép bằng cách nhấp chuột phải vào các bảng và sau đó nhấp vào Thiết kế.

2.Nhấp vào tab cho bảng có các cột bạn muốn sao chép và chọn các cột đó.

3.Từ Chỉnh sửa menu, nhấp Sao chép.

4.Mở cửa sổ Trình chỉnh sửa truy vấn mới.

5. Nhấp chuột phải vào Trình soạn thảo truy vấn, sau đó nhấp vào Truy vấn thiết kế trong trình biên tập.

6.In các Add Table hộp thoại, chọn nguồn và đích bảng, nhấp Thêm, và sau đó đóng Add Table hộp thoại.

7. Nhấp chuột phải vào khu vực mở của Trình chỉnh sửa truy vấn, trỏ đến Loại thay đổi, sau đó nhấp vào Chèn kết quả.

8.Trong Chọn Bảng mục tiêu cho kết quả chèn hộp thoại, chọn bảng đích.

9. Trong phần trên của Trình thiết kế truy vấn, hãy nhấp vào cột nguồn trong bảng nguồn.

10.Trình thiết kế truy vấn hiện đã tạo truy vấn INSERT. Bấm OK để đặt truy vấn vào cửa sổ Trình soạn thảo truy vấn gốc.

11.Tắt truy vấn để chèn dữ liệu từ bảng nguồn vào bảng đích.

Để biết thêm thông tin https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine

Các vấn đề liên quan