Update更新时where条件后面使用rownum=1

heqiyu34 2011-09-14 03:15:23
update tmp_168_month t37
set (t37.acc_mode, t37.dp_id, t37.dp_code, t37.accessid)
= (select tf.ACC_MODE, tf.onuid, tf.onucode, tf.accessid
from tmp_168_month_fttx tf
where t37.serv_id=tf.serv_id and rownum=1)
where exists(select 1 from tmp_168_month_fttx tf
where t37.serv_id=tf.serv_id)
and t37.acc_mode is null;


对于这个更新语句,为什么要加一个rownum=1的限制呢?如果把它去掉,如下:

update tmp_168_month t37
set (t37.acc_mode, t37.dp_id, t37.dp_code, t37.accessid)
= (select tf.ACC_MODE, tf.onuid, tf.onucode, tf.accessid
from tmp_168_month_fttx tf
where t37.serv_id=tf.serv_id)
where exists(select 1 from tmp_168_month_fttx tf
where t37.serv_id=tf.serv_id)
and t37.acc_mode is null;


两者会有什么区别吗??
...全文
1106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
heqiyu34 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sasamao 的回复:]
返回的記錄不止一條,只要查到一條滿足條件的即給予更新
[/Quote]
明白了,多谢你们了!
xuhao167 2011-09-14
  • 打赏
  • 举报
回复
本来想说两句 学习了
sasamao 2011-09-14
  • 打赏
  • 举报
回复
返回的記錄不止一條,只要查到一條滿足條件的即給予更新
jimmylin040 2011-09-14
  • 打赏
  • 举报
回复
rownum=1一般是为了防止出现多行记录,造成溢出。
luckyzhangye 2011-09-14
  • 打赏
  • 举报
回复
select tf.ACC_MODE, tf.onuid, tf.onucode, tf.accessid
from tmp_168_month_fttx tf
where t37.serv_id=tf.serv_id的记录可能不只一条
如果你执行下面一条语句的话可能会报错。。



PS:你执行一下不就知道了
Dave 2011-09-14
  • 打赏
  • 举报
回复

楼主执行一下这2个SQL 就清楚了:
select tf.ACC_MODE, tf.onuid, tf.onucode, tf.accessid
from tmp_168_month_fttx tf
where t37.serv_id=tf.serv_id and rownum=1


select tf.ACC_MODE, tf.onuid, tf.onucode, tf.accessid
from tmp_168_month_fttx tf
where t37.serv_id=tf.serv_id


Oracle Rownum 伪列详解
http://blog.csdn.net/tianlesoftware/article/details/4970292

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧