论坛首页 招聘求职论坛

早上面试的一道数据库问题,请教怎么做

浏览 23810 次
精华帖 (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  
)
0 请登录后投票
   发表时间: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.
0 请登录后投票
   发表时间: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的英文文档也是这么个意思.



0 请登录后投票
   发表时间: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来关联,不过感觉效率方面不是很好
0 请登录后投票
   发表时间:2008-11-01  
这种方法比较好:
update A set (cloumn1,cloumn2)=(select cloumn1,cloumn2 from B where age>40) where age>40;
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics