2011-03-11 42 views
0

问题:MySQL SQL:在非标准化表上进行JOIN时更新?

我有两个表,动物表和占位符表。我想在动物桌上做一个更新 ,以便填写适当的空白。动物 表未正确归一化。

是否可以使用纯MySQL SQL语句执行此操作,而不是在程序或脚本中循环使用 ?

例:

==这里是 “之前” ==

animal   placeholder 
1 | dog   1 | dog | log 
1 | snog   2 | cat | mat 
1 | _blank_  3 | bird | word 
2 | cat 
2 | sat 
2 | _blank_ 
3 | bird 
3 | heard 
3 | _blank_ 

==这里是== “后”

animal   placeholder 
1 | dog   1 | dog | log 
1 | snog   2 | cat | mat 
1 | log   3 | bird | word 
2 | cat 
2 | sat 
2 | mat 
3 | bird 
3 | heard 
3 | word 

问题:

你可以利用吗?构造一条MySQL SQL语句,它将使用UPDATE将 “之前”转换为“之后”?

我假设它将有必要使用JOIN,因为查询需要知道放置占位符的正确位置。

==解==

UPDATE动物 SET名称=( SELECT名词 FROM占位符 WHERE( a.id = ID ) )WHERE a.name为空;

+0

被问到的问题。 – dreftymac 2014-05-14 20:47:42

回答

1

也许类似这样的东西:在非常规的数据表结构非规范化的数据从一个著名的开源项目打交道时

update animal a 
set name = (select col2 from placeholder where a.name is null and a.id = id) 
+0

差不多,但这是行不通的,因为它取代了狗/ snog,猫/ sat和鸟/由于某种原因听到了NULL。换句话说,UPDATE影响所有九行而不是仅仅打算三个。尽管感谢您的帮助。 – dreftymac 2011-03-11 18:12:22

+0

UPDATE动物 SET名称=( SELECT名词 FROM占位符 WHERE( a.id = ID ) )WHERE a.name为空; 现在工作,只需修改WHERE子句。再次感谢。 – dreftymac 2011-03-11 18:19:28