SQL 语句 UPDATE带嵌套子查询的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 语句 UPDATE带嵌套子查询的问题相关的知识,希望对你有一定的参考价值。
create table AAA( mc varchar(10), s1 int ) create table BBB( mc varchar(10), s1 int ) insert AAA values('A','997')insert AAA values('B','1234') insert BBB values('A','105')insert BBB values('A','213')insert BBB values('B','116')insert BBB values('B','211')insert BBB values('B','303')更新A表里S1 值 ,A表里S1值-去B表里值 update AAA set AAA.s1=AAA.s1-BBB.s1where BBB.s1 in (select sum(BBB.s1) from BBB group by mc) 我到底错在了哪 望高手指教
参考技术A create table AAA( mc varchar(10), s1 int )insert AAA values('A','997')
insert AAA values('B','1234')
create table BBB( mc varchar(10), s1 int )
insert BBB values('A','105')
insert BBB values('A','213')
insert BBB values('B','116')
insert BBB values('B','211')
insert BBB values('B','303')
-- 更新A表里S1值 ,A表里S1值-去B表里值
-- ? B表里S1值之合?
update AAA set
s1 = s1 - isnul((select sum(s1) from BBB where BBB.mc=AAA.mc),0)
-- next for M$SQL:
update AAA set
s1 = s1 - B.s1
from AAA
join (select mc, sum(s1) as s1 from BBB group by mc) B
on B.mc = AAA.mc 参考技术B 我其实对你的这个问题有几点不明白的,
1.你的S1是int类型的,但是插入的时候是'999'这样的字符串.
2.update语句的逻辑是什麽,就是你想要得到一个什麼样的结果.
where BBB.s1 in (select sum(BBB.s1) from BBB group by mc)这句的逻辑有问题!
3.update语句如果有where条件,应该这样写
update a set A.S1=AAA.s1-BBB.s1
FROM AAA a
where BBB.s1 in (select sum(BBB.s1) from BBB group by mc)
希望可以帮到您. 参考技术C 看了你的意思,语句应该这样写
update aaa set s1=a.s1-b.s1
from aaa a
left join (select mc,sum(BBB.s1) s1 from BBB group by mc) b on a.mc=b.mc 参考技术D 你的更新语句写法不对,你改为这样试试:
UPDATE AAA
SET AAA.S1 = AAA.S1 - B.S1
FROM (SELECT SUM(S1)
FROM BBB
GROUP BY MC
) B
WHERE AAA.MC = B.MC本回答被提问者采纳
编写SQL语句UPDATE查询FMDB
【中文标题】编写SQL语句UPDATE查询FMDB【英文标题】:Writing SQL statement UPDATE query FMDB 【发布时间】:2012-03-30 10:05:28 【问题描述】:我在使用FMDB
的数据库时遇到问题UPDATING
。这是我的SQL
BOOL success = [db executeUpdate:[NSString stringWithFormat:@"UPDATE Person SET gender= '%@' WHERE name= '%@'",gender,name]];
我想知道我是否在使用=
符号进行比较时犯了一个错误(如果是,我该如何纠正它)。或任何其他解决方案。帮忙?
编辑:
DB Error 7: out of memory
2012-03-30 16:10:03.341 den[5168:f803] Error calling sqlite3_step (1: SQL logic error or missing database) SQLITE_ERROR
2012-03-30 16:10:03.343 den[5168:f803] DB Query: COMMIT TRANSACTION;
【问题讨论】:
看看这可能对你有帮助:***.com/a/392536/1126111 【参考方案1】:你应该使用这种格式:
BOOL success = [db executeUpdate:@"UPDATE Person SET gender = ? WHERE name = ?",gender,name];
你也在使用提交而不启动事务,所以也去掉那个部分。
【讨论】:
即使我将字符串添加到?
,例如性别 = '男性',它也不会在数据库中更新。为什么是这样 ?看到这个帖子***.com/questions/9941967/…【参考方案2】:
我用过这个:
FMDatabase * database = [self openDB:[DELEGATE getDatabasePath]];
NSString *query = @"";
query = [NSString stringWithFormat:@"UPDATE Person SET gender= '%@' WHERE name LIKES '%@'",gender,name];
[database executeUpdate:query];
[database commit];
[database close];
【讨论】:
我还收到一个名为Out of memory
的错误/警告。可能是SQL没有问题和其他一些问题。你知道那个错误是什么意思吗?帮助【参考方案3】:
试试这个:
BOOL success = [db executeUpdate:[NSString
stringWithFormat:@"UPDATE Person SET gender=? WHERE name LIKES ?",gender,name]];
在 fmdb 方法 [executeUpdate] 中使用“?”而不是“%@”
【讨论】:
【参考方案4】:试试这个:
BOOL success = [db executeUpdate:[NSString stringWithFormat:@"UPDATE Person SET gender= '%@' WHERE name LIKES '%@'",gender,name]];
【讨论】:
【参考方案5】:请试试这个:
NSString *updateQuery = [NSString stringWithFormat:@"UPDATE YOUR_DATABASE_TABLE_NAME SET row_value = %@",@"fmdb"];
Bool updateSuccess = [FMDataBaseObject ExecuteUpdate:updateQuery];
【讨论】:
以上是关于SQL 语句 UPDATE带嵌套子查询的问题的主要内容,如果未能解决你的问题,请参考以下文章