SQL,数据库批量修改。这么写错在哪儿了
来源:百度知道 编辑:UC知道 时间:2024/06/14 00:55:21
update A表 set A1 = 1000 where ID in (select ID from B表 where B1 != 0)
表一,表名 A,字段名 A1,字段名ID
表二,表名 B,字段名 ID,字段名B1
要求,筛出B表中B1字段不为零时的ID。(A,B表中的ID是同一个),将筛出的每一个ID行中的A1字段都改成1000(在A表中改)。
数据库是Oracle的。
如上写法,运行之后就没反应了,貌似读死机了一样。
可是用Access建了个表,也这么写的就很快修改了。
请教我错在哪儿了。
谢了。
顺便问必须不等于写成 <>吗?
Access的那个,我用的<> 。ok
oracle用的 != ,结果汗,今天重起了电脑,行了。貌似是昨天死机没重起闹得
我想问问。这 <> 和 != 用法有区别吗?
表一,表名 A,字段名 A1,字段名ID
表二,表名 B,字段名 ID,字段名B1
要求,筛出B表中B1字段不为零时的ID。(A,B表中的ID是同一个),将筛出的每一个ID行中的A1字段都改成1000(在A表中改)。
数据库是Oracle的。
如上写法,运行之后就没反应了,貌似读死机了一样。
可是用Access建了个表,也这么写的就很快修改了。
请教我错在哪儿了。
谢了。
顺便问必须不等于写成 <>吗?
Access的那个,我用的<> 。ok
oracle用的 != ,结果汗,今天重起了电脑,行了。貌似是昨天死机没重起闹得
我想问问。这 <> 和 != 用法有区别吗?
哪也没错,用in的写法本身效率就低
你在ac里执行的快,是因为数据没导全吧?
可以用下边的写法试验一下
update A set A1= (select 1000 from B where a.id=b.id and b.id<>0)
将不等于换掉
update A表 set A1 = 1000 where ID in (select ID from B表 where B1 <> 0)
我也汗一个先。
1,SQL没问题,如果死掉,先看看oracle是不是有问题,
2,如果没有问题建议看看index是不是有问题。
3,或者db 事务死锁。
这么简单的SQL如果执行死机,数据量小于亿级就不太可能了。
另,<> 和 != 我认为么有区别,反正我都用的。
没有区别的
如下写法效率会好点:
update A表 set A1 = 1000 from B表 where B表.ID=A表.ID and B表.B1<>0
或者
update A表 set A1 = 1000 where ID in (select distinct ID from B表 where B1<>0)