2010-08-30 217 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