2017-07-25 21 views
1

假設我正在創建一個「學生」數據庫,並且裏面有一張名爲「考試」的表格。現在我有以下兩列 - '標記'和'等級',我希望「等級」列自動接收基於'標記'中輸入的值的值。對'標記'> = 90說'A',對'標記'> = 80說'B'等等。 有沒有辦法做到這一點?sql - 是否可以根據另一列中的值設置列值?

+1

你應該看看生成的列或觸發器來做到這一點。 – HLGEM

回答

4

不是很容易。在MySQL中,你可以做一個更新:

update students 
    set grade = (case when marks >= 90 then 'A' 
         when marks >= 80 then 'B' 
         . . . 
       end); 

但是,這會掉過期的下一個insertupdate聲明。

在MySQL 5.7.6,你可以有自動生成列:

alter table students 
    add grade char(1) as (case when marks >= 90 then 'A' 
           when marks >= 80 then 'B' 
           . . . 
          end); 

這很方便,因爲列在查詢時計算,以便它是自動跟上時代的。

在早期版本中,你可以做一個觀點類似:

create view v_students as 
    select s.*, 
      (case when marks >= 90 then 'A' 
       when marks >= 80 then 'B' 
       . . . 
      end) as grade 
    from students; 

這幾乎生成列一樣好,但它要求每個人查詢視圖。

最後,您可以實際存儲該值,使用觸發器在marks更改時保留該值。

+0

哇。謝謝。 :) – Vaibhav

相關問題