2016-07-14 34 views
-2

我有一個表名content_details,想打印ID十進制這樣的:給ID十進制SQL

id  contents 
1.1 vegetarian 
1.2 non-vegetarian 

我已經使用這個查詢

ALTER TABLE content_details 
ADD COLUMN id decimal(4,2) 

然後用它來保存數據在列

ALTER TABLE content_details 
ADD id = 1.1 
WHERE contents_details= 'vegetarian' 

但得到錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 1.1 WHERE contents_details= 'vegetarian'' at line 2

+0

和錯誤是什麼? – Jens

+0

你不能只編寫命令並嘗試它們。你有沒有參考['ALTER TABLE'](http://dev.mysql.com/doc/refman/5.7/en/alter-table.html)的工作原理?你在這裏做的是相當於'改變表計算機添加屎給我的數據庫謝謝' – tadman

+0

對不起,我只是一個新手。我已經在某處讀過它,所以用他的命令 – nbajpai

回答

0

必須執行的操作有兩個:

首先是DDL操作,這樣你就可以添加ID字段(我想你還沒有它的時候你的桌子出生)。

所以,你可以寫爲:

ALTER TABLE content_details 
ADD id decimal(4,2) 

所以第二個操作是關於你的領域的填充一個DML腳本,如下:

UPDATE content_details 
SET id = 1 + 
COALESCE(SELECT COUNT(*) 
FROM content_details c2 
WHERE c2.contents > content_details.contents),0) * 0.1 
+0

由於「非素食者」會在「素食者」之前進行排序,因此您所擁有的「WHERE」條款將產生與OP所要求的不同結果。它試圖通過不相關的內容進行排序,這會產生各種重複鍵錯誤,而不介意邏輯斷開。如果OP需要這樣的值,那麼很可能數據應該被專門分配,而不是自動生成。 –

+0

@ Clockwork-Muse:你說得對,但是如果我讀了這個問題,我讀了一個ALTER TABLE,所以我想這個字段是在表創建後添加的。所以我寫了一個關於id字段填充的通用更新。如果我們的OP在他的請求中更具說服力,我可以更好地調整我的解決方案。我改變了< with > –