2010-08-30 132 views
0

假設我想在一個數據庫中執行一個更新,該數據庫在表格中以同樣的名字保存汽車等信息。SQL更新查詢

我期待執行的更新包括將模型中的表格中的名稱從「Ford」更改爲「Ford-」,即僅更改設計爲「Ford」的位置,而不是已經具有型號名稱的位置的「福特 - 」

通過運行下面的SQL查詢,我會得到我期望的結果嗎?

UPDATE cars 

SET model='Ford-' WHERE model='Ford'  

在型號名稱是「福特」這在我看來,應該只更新汽車的實例,並改變那些「Ford-」,不會繼續嘗試更新任何地方的名稱是「Ford-」已經如此,還是什麼?

如果是我就在想,如果有可能被用來確保只有模型車=「福特」被改變,而不是汽車行駛模式=「Ford-」

我一個純粹的SQL查詢結構我詢問,因爲我不確定SQL在上述查詢中是如何識別搜索字符串「Ford」的,即SQL會查找完全匹配,還是模型中單詞「Ford-」的存在會觸發「誤報」 ?多年來沒有做過SQL查詢。

不要談論正常的形式或類似的東西,我不負責創建數據庫/表等。我只是看着可能清理數據庫中的一些信息。

表汽車看起來是這樣的:

 
cars 
'id', 'int(10) unsigned', '', 'PRI', '', 'auto_increment' 
'something0', 'varchar(50)', '', 'UNI', '', '' 
'something1', 'varchar(50)', 'YES', '', '', '' 
'something2', 'varchar(50)', 'YES', '', '', '' 
'something3', 'text', 'YES', '', '', '' 
'something4', 'text', 'YES', '', '', '' 
'something5', 'varchar(50)', 'YES', '', '', '' 
'something6', 'varchar(50)', 'YES', '', '', '' 
'something7', 'varchar(15)', 'YES', '', '', '' 
'model', 'varchar(255)', 'YES', '', '', '' 

評論都非常歡迎

+1

我不明白爲什麼這是社區wiki。明確的問題應該以你自己的名義。 – Oded 2010-08-30 12:33:52

+0

我認爲這將允許人們編輯爲常規維基,並可能創建一個關於更新的小文章,其中包含回答關於如何明確更新查詢將工作的問題所需的信息,將汽車替換爲您想要的任何表名稱並進行建模與任何名稱和「福特」的價值與其他東西......這就是爲什麼...... – 2010-08-30 12:46:23

+0

你應該閱讀數據庫標準化:http://en.wikipedia.org/wiki/Database_normalization。如果你能理解這個概念,將來這些類型的變化將會容易得多並且危害更小。 – 2010-08-30 14:00:03

回答

2

你是正確的:

... WHERE model='Ford' 

是精確匹配(僅適用於符合 「福特」,沒有按」噸匹配「福特 - 」)。對於子串匹配,你可以使用

... WHERE model LIKE 'Ford%' 

(匹配任何以「Ford」開頭的東西 - 但這顯然不是你想要的)。

請參閱UPDATEWHERE的文檔。

+1

輝煌,感謝您的快速回復,有一個愉快的一天/晚上/晚上或任何適合您的時區的東西:) – 2010-08-30 12:47:53

+1

@Einar Petersen:不客氣,祝你有美好的一天。 – Piskvor 2010-08-30 12:52:57

1

它將尋找一個EXAKT比賽,

UPDATE cars SET model='Ford-' WHERE model='Ford' 

只會變更表,其中模型是完全==「福特」

+0

感謝您花時間給出答案 – 2010-10-28 12:20:45

0

,如果你需要在「福特」,但不是「福特的不完全匹配 - 」因爲有別的東西在外地以及(這Ford-讓我覺得有可能是)

試試這個:

UPDATE cars 
SET model= Replace(model, 'Ford','Ford-') 
WHERE model like 'Ford%' and model not like 'Ford-%' 
+0

感謝您花時間給出答案 – 2010-10-28 12:21:34