2012-09-15 80 views
-1

好的,我正在尋找一種方法來使某個字段等於3個其他字段的總和。我有3個不同的評級字段,然後是一個'總體評分'字段,我需要自動等於其他3的總和。我知道如何使用select語句檢索值,我只是希望它自動發生在桌子。 - 使用MySQL的SQL自動派生字段

+2

是否使用的是RDBMS:最通用的(工作在大多數的DBMS)的方式來做到這一點,但可能是最適合你的需求(沒有數據庫結構變化需要)正在創建一個視圖,例如什麼樣的?有些可以讓你在表格上定義一個計算列,對於其他人(例如MySQL)你需要使用觸發器。 – McGarnagle

+0

因爲postgresql不支持計算列(其他流行的免費數據庫),所以很可能您需要使用其他功能。例如。使用視圖或觸發器。如果您只需要選擇列,那麼最好在select語句中執行。如果您需要對其進行排序以提高效率,請在表達式上創建索引。 – ronalchn

+0

使用MySQL,對不起 – cameronjonesweb

回答

2

有不同的方式在不同的DBMS要做到這一點,例如虛擬列,

在甲骨文

在SQL Server
overall NUMBER GENERATED ALWAYS AS (rating1 + rating2 + rating3) VIRTUAL 

[overall] AS (rating1 + rating2 + rating3) PERSISTED 

可惜的是並非所有DBMS都支持虛擬列。

CREATE VIEW ratings_overall AS 
    SELECT rating1, rating2, rating3, (rating1 + rating2 + rating3) as overall 
    FROM source_table; 
+0

我使用MySQL,並且我已經在表中設置了列,正是我需要運行哪個查詢才能使其工作,或者它可以工作嗎?創建視圖運行良好,將其放在同一個表中可能更好。 – cameronjonesweb

+0

您可以做兩件事,一種是在插入時插入適當的值('INSERT INTO your_table(...,rating1,rating2,rating3, (...,13,15,54,(13 + 15 + 54))')或更新(更新your_table SET ...,rating2 = 20,overall =(13 + 20 + 54)',你可以在表達式中使用列名,因爲MySQL從左到右評估這個語句,但這不是一個好習慣);另一種方式是批量更新,稱爲periodicaly('UPDATE your_table SET overall = rating + rating2 + rating3',如果您能夠區分要更新的行,則可能有WHERE條件)。 – WojtusJ

+0

除非你正在研究像Data Warehouse這樣的VLDB,否則任何一種方法都不是一個好的解決方案。觀看這種任務,你應該使用它們。在目前的情況下,你會有冗餘和可能的不一致。 – WojtusJ