update更新为空值的问题

摘要:
SQL˃setlinesize200SQL˃setpagesize200SQL˃select*froma;IDAMT--------------------1100220033004400SQL˃从b中选择*;IDAMT--------------------19921993299SQL˃explainplanforupdateaseta.amt=(selectb.amtfrombwh
SQL> set linesize 200
SQL> set pagesize 200
SQL> select * from a;

	ID	  AMT
---------- ----------
	 1	  100
	 2	  200
	 3	  300
	 4	  400

SQL> select * from b;

	ID	  AMT
---------- ----------
	 1	   99
	 2	  199
	 3	  299

SQL> explain plan for 
update a set a.amt =(select b.amt from b  where a.id=b.id)  2  ;

Explained.

SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 1561808831

---------------------------------------------------------------------------
| Id  | Operation	   | Name | Rows  | Bytes | Cost (%CPU)| Time	  |
---------------------------------------------------------------------------
|   0 | UPDATE STATEMENT   |	  |	4 |   104 |    19  (22)| 00:00:01 |
|   1 |  UPDATE 	   | A	  |	  |	  |	       |	  |
|   2 |   TABLE ACCESS FULL| A	  |	4 |   104 |	3   (0)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| B	  |	1 |    26 |	3   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("B"."ID"=:B1)

Note
-----
   - dynamic sampling used for this statement (level=2)

19 rows selected.

当A表ID=4的时候,那么B.ID=4 返回空,此时A表就被更新为空

正确写法:
update a set a.amt =(select b.amt from b  where a.id=b.id)
where a.id in (select b.id from b)

免责声明:文章转载自《update更新为空值的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自适应网站设计对百度友好的关键:添加applicable-device标签(转)UnityShader快速上手指南(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

查看Mysql正在执行的事务、锁、等待

一、关于锁的三张表(MEMORY引擎) ## 当前运行的所有事务 mysql> select * from information_schema.innodb_trxG; *************************** 1. row *************************** trx_id: 613963...

10条技巧优化数据库速度

  大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。在这篇文章中,我收录了十个优化数据库速度的技巧。   1、小心设计数据库   第一个技巧也许看来理所当然,但事实上大部分数据库的问题都来自于设计不好的数据库结构。   譬如我曾经遇见过将客户端信息和支付信息储存在同一个数据库...

SQL总结(一)基本查询

SQL查询的事情很简单,但是常常因为很简单的事情而出错。遇到一些比较复杂的查询我们更是忘记了SQL查询的基本语法。本文希望通过简单的总结,把常用的查询方法予以总结,希望能够明确在心。 场景:学生信息系统,包括学生信息、教师信息、专业信息和选课信息。 --学生信息表 IF OBJECT_ID (N'Students', N'U') IS NOT NULL...

WEB新手之sql注入

  继续写题。   这题看上去是一道sql注入题。F12查看后台代码。   可以看到后台有两个变量,分别是uname以及passwd。然后接下来读一下后台的代码,这里的意思是,如果用户输入的密码经过md5加密后,和通过select语句选出来的password相等,则输出“login success”,否则输出“login fail”。利用这里md5()...

[转载]oracle 存储过程的基本语法及注意事项

原文地址:oracle 存储过程的基本语法及注意事项作者:简单爱  oracle 存储过程的基本语法及注意事项 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 (     参数1 IN NUMBER,     参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN...

在SqlServer中通过SQL语句实现树状查询

1 CREATE PROCEDURE [dbo].[GetTree] 2 @Id int 3 AS 4 BEGIN 5 with cte as 6 ( 7 select Id,Pid,Name,0 as lvl fromEntity 8 where Id = @Id 9 union all 10...