这条updata语句怎么写?(50分)

  • 主题发起人 zhengxionglai
  • 开始时间
Z

zhengxionglai

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库存在对称的两个记录,比如数据结构和实例数据为

field1, field2, field3, field4, field5,...
f11 , true ...
f11 , false...
...

即记录中,field1列的数据均存在相同的两项,它们以field2的不同逻辑值来区分,现在要把field2值为true的记录的其他某些列(field3,field4,field5)的数值赋值给field2值为false的记录的对应项。


我能想到的是用next,并作判断,感觉比较麻烦,也没效率。江湖救急!!!
 
看看你的数据库,对Update的支持程度了
标准的SQL是没有希望了
如果update支持自连接多表更新,还有希望
否则就要在客户端自己处理了
现查处为true的那条记录,然后去更新为false的那条记录,一条一条的来
 
我也想知道,狂推!!
 
update TABLENAME
set TABLENAME.field3=aTable.Field3,
TABLENAME.field4=aTABLE.field4....
where TABLENAME.field1 =(select fiel1.field3.field4.... from TABLENAME WHERE field2=true) as aTABLE.field1
and TABLENAME.field2 =false;
没试过。

 
//如果是Oracle的话,可以这样:

update table1 set (field3,field4,field5....)=
(select a.field3,a.field4,a.field5.... from table1 a where a.field1=b.field1 and a.field2=True)
where field2=false
 
update TableName
set field3=b.field3,
field4=b.field4,
field5=b.field5...
from TableName a, (select * from TableName where field1=a.field1 and field2=true) b
where a.field1=b.field1 and a.field2=false;
 
好像不行,把原代码贴出来了

 Datamodule1.TempADOQuery.SQL.Add('update gz');
Datamodule1.TempADOQuery.SQL.Add('set 天数=b.天数');
Datamodule1.TempADOQuery.SQL.Add('from (select 天数 form gz where 是否正帐=true) as b');
Datamodule1.TempADOQuery.SQL.Add('where gz.是否正帐=False and gz.工号=b.工号');
 
sql.text:='update TableName
set field3=b.field3,
field4=b.field4,
field5=b.field5...
from TableName a, (select * from TableName where field1=a.field1 and field2=true) b
where a.field1=b.field1 and a.field2=false;
';
 
数据库是Access
 
ACCESS不支持这种UPDATE,如果换大型数据库,你可以这样写:
update table1 a set (a.field3,a.field4,a.field5,...)=(select b.field3,b.field4,
b.field5,... from table1 b where a.field1=b.field1 and b.field2=True)
where a.field2=false
 
Access肯定支持update,只是怎样解决这个问题呢?

我想到的是用next的方式逐条判断、更新,但太死板了
 
zhengxionglai你看不懂中文呀,我说:ACCESS不支持“这种”UPDATE!!
就是“支持自连接、多表更新”的UPDATE!
 
问题没有解决,请继续。

在csdn上没有满意答案,真不希望在这里也是,这是我在这里的第二个问题,
第一个问题也是自己搞定的
 
UPDATE table1 AAA,(select * from table1 where field2=true) BBB
SET AAA.field3 = BBB.field3,
AAA.field4 = BBB.field4
WHERE AAA.field2=false and AAA.field1=BBB.field1
 
定义表结构科学一点,编程时头就会小一点,生产力就会高一点。
 
谢谢各位,在你们的提升下,我是用以下方法解决:
UPDATE table1 as AAA,(select * from table1 where field2=true) as BBB
SET AAA.field3 = BBB.field3,
AAA.field4 = BBB.field4
WHERE AAA.field2=false and AAA.field1=BBB.field1

你们提供的方法都试过,不知道问题在哪里,我想是我的问题

 
我觉得 svw0506 说的很有道理啊
 
QUICKSLIVER所说的是对的
 
:zhengxionglai and QUICKSLIVER
你们的方法是正确的。
(select * from table1 where field2=true) as BBB 是一个临时的记录集。
这时相当于在两个表中进行操作。
 
顶部