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用的 != ,结果汗,今天重起了电脑,行了。貌似是昨天死机没重起闹得

我想问问。这 <> 和 != 用法有区别吗?

哪也没错,用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)