2013-03-01 76 views
7

Tôi xin lỗi trước nếu SQL không hoạt động theo cách này, tôi chủ yếu là mã trong C++/C# và tôi không có nhiều kinh nghiệm trong SQL. Về cơ bản, tôi muốn lặp qua từng hàng của bảng và thay đổi giá trị cột dựa trên các cột khác. Một bảng ví dụ có thể trông như thế này:Làm cách nào để cập nhật cột trong tất cả các hàng của bảng dựa trên giá trị trong các cột khác (cho cùng một hàng)?

__________________________ 
|first #|second #|third #| 
|_______|________|_______| 
|___1___|___1____|___0___| 
|___5___|___2____|___0___| 
|___3___|___6____|___0___| 
|___2___|___4____|___0___| 

Bây giờ, trong mã giả, tôi đang cố gắng để có được tương đương với:

foreach row in mytable, column 3 = column 1 + column 2 

Điều gì sẽ là một cách để có được một tương đương SQL điều này, hoặc nó có thể không được thực hiện theo cách này?

Trả lời

16

Điều này có thể đơn giản như thế này,

UPDATE tableName 
SET thirdCol = firstCol + secondCol 
5

Như đã được trả lời một bản cập nhật đơn giản có thể được thực hiện bằng:

UPDATE MyTable 
SET  Column3 = Column1 + Column2; 

giá trị Tuy nhiên được giữ những caclulated, đặc biệt là cho các tính toán đơn giản là không tốt thực hành (luôn có ngoại lệ và đây là một nguyên tắc không phải là quy tắc), nếu cột 3 luôn là tổng của Column1 và cột2 thì nếu DBMS của bạn cho phép bạn có thể tạo cột được tính toán.

ví dụ: Trong SQL Server:

ALTER TABLE MyTable ADD Column4 AS Column1 + Column2; 

Nếu DBMS của bạn không cho phép cột tính sau đó bạn có thể tạo ra một cái nhìn, vì vậy bạn chỉ lưu trữ các dữ liệu cơ sở và không phải là tính toán (một lần nữa cú pháp có thể thay đổi bởi DBMS):

CREATE VIEW myTableWithTotal 
AS 
    SELECT Column1, Column2, Column1 + Column2 AS Column2 
    FROM MyTable 

Một trong những phương pháp này sẽ đảm bảo giá trị cột3 của bạn vẫn được cập nhật ngay cả khi column1 hoặc column2 được cập nhật

+0

Cảm ơn thông tin bổ sung! Tôi may mắn không cần phải thực hiện bất cứ điều gì như thế này nhưng nó rất hữu ích để biết cho các ứng dụng trong tương lai. – proseidon

+0

Cảm ơn nhưng cột ban đầu sẽ bị xóa sau đó trong trường hợp của chúng tôi nhưng nó hữu ích để biết cho các ứng dụng trong tương lai. – Roel

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