锁定老帖子 主题:早上面试的一道数据库问题,请教怎么做
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-14
update A
set (A.column1, A.column2) = ( select B.column1, B.column2 from B where B.id = A.id and B.age > 40 and rownum = 1 ) where exists ( select B.id from B where B.id = A.id and B.age > 40 ) |
|
返回顶楼 | |
发表时间:2008-06-15
fengyunxing 写道 update A set a.column1=b.column1,a.column2=b.column2 from a,b where b.age>40 and a.id=b.id
Yes, it works. |
|
返回顶楼 | |
发表时间:2008-06-15
bruce.peng 写道 mysql 用 inner join 比较优化
为什么呢? mysql什么版本支持你这个观点? ySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译 到MySQL 3.23.12 时,当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。如果 EXPLAIN 显示MySQL ...INNER JOIN 和, (逗号) 在语义上是等同的。都是在所有的表之间进行一个全...的效率和加快 LOAD DATA INFILE 的... www.phpx.com/mysql/cn/06-4.html 59K 2005-8-5 - 百度快照 5的中文翻译样本也是,,,我看过5的英文文档也是这么个意思. |
|
返回顶楼 | |
发表时间:2008-08-06
aimer311 写道 armorking 写道 oracle
update A set A.column1 = ( select b.column1 from B where B.id = A.id and B.age > 40 ), A.column2 = ( select b.column2 from B where B.id = A.id and B.age > 40 ) 我基本上思路跟这个一样,想不出mysql跟oracle有什么不一样 update A set A.column1 = ( select b.column1 from B where B.id = A.id and B.age > 40 ), A.column2 = ( select b.column2 from B where B.id = A.id and B.age > 40 ) where A.id=B.id and B.age>40 因为是A,B相应记录,所以我加上了where条件。 感觉好别扭。 这个也是有问题的, 因为最后where条件中的B表是识别不了的,之前B表都是放在括号内,更正后如下:在mysql测试后没有问题 update A,B TB set A.column1 = ( select b.column1 from B where B.id = A.id and B.age > 40 ), A.column2 = ( select b.column2 from B where B.id = A.id and B.age > 40 ) where A.id=TB.id and TB.age>40 即在外部再用B表的别名TB来关联,不过感觉效率方面不是很好 |
|
返回顶楼 | |
发表时间:2008-11-01
这种方法比较好:
update A set (cloumn1,cloumn2)=(select cloumn1,cloumn2 from B where age>40) where age>40; |
|
返回顶楼 | |
发表时间:2009-04-30
update a set a.column1 = b.column1,a.column2 = b.column2
from A as a inner join B as b on a.id = b.id where b.age > 40 |
|
返回顶楼 | |