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带嵌套子查询的问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL相关子查询和嵌套子查询的区别

sql语句中where条件的嵌套子查询性能

关于SQL DELETE嵌套子查询问题

T-SQL查询2

SQL嵌套子查询和相关子查询的执行过程有啥区别

SQL嵌套子查询和相关子查询的执行过程有啥区别