sql-聚合不应出现在 UPDATE 语句的集合列表中。

问题描述

聚合不应出现在 UPDATE 语句的集合列表中。
 create trigger upd_grade on Reports
for update,insert
as
    update Students
    set CreditHours=(select sum(CreditHours) from Courses where Cno in(
    select Cno from Reports where Reports.Grade>=60 and Reports.Sno in(
    select Sno from inserted)))where Students.Sno in(select Sno from inserted)

解决方案

(select sum(CreditHours) from Courses where Cno in(
select Cno from Reports where Reports.Grade>=60 and Reports.Sno in(
select Sno from inserted)))

    定义个参数,接收这个sum的值,然后再update。

解决方案二:

写得太乱了,建议分开写,先把CreditHours查询出来,然后再写更新语句。

解决方案三:

什么数据库,上SQLServer试了试,没问题

 create table Reports(
  Grade int default 0,
  sno varchar(20),
  cno varchar(20)
);
create table Students(
  sno varchar(20),
  CreditHours int  default 0

);
create table Courses(
  cno varchar(20),
  CreditHours int  default 0
)

insert into Students(sno) values('s1');
insert into Courses(cno,CreditHours) values('c1',20);
insert into Courses(cno,CreditHours) values('c2',10);
insert into Reports(Grade,sno,cno) values(60,'s1','c1');--插入这语句不报错

解决方案四:

末尾少掉一个括号。为什么会少的?

时间: 2025-01-24 13:33:25

sql-聚合不应出现在 UPDATE 语句的集合列表中。的相关文章

一条update语句的优化探索

今天经开发同学反馈,发现有一些update语句阻塞了部分业务流程,为什么说一些而不是一条,是因为这些update语句都在一个存储过程中,语句结构相仿,真有一种一荣俱荣,一损俱损的感觉.而比较纠结的是这样的update语句有差不多10个.从我收到反馈到观察分析,里面的第一条update语句运行了近5个小时,还没有完成,从SQL Monitor的报告来看,似乎进度甚微,按照这个进度,这些语句的执行时间会非常惊人. 我先拿到了一个初步的报告. 概览信息如下: 这条语句从生成的执行计划来看,简直完美,但

php+MySQL判断update语句是否执行成功的方法_php技巧

update语句是PHP+MySQL中常用的操作,判断update语句是否执行成功是其中非常重要的一个环节.本文就以实例展示了php+MySQL判断update语句是否执行成功的方法.分享给大家供大家参考之用.具体方法如下: 代码一: $rs=MySQL_query($sql); if(mysql_affected_rows()) echo "sql执行成功"; else echo "sql执行失败"; 代码二: <?php /* 连接数据库 */ mysql

相同update语句在MySQL,Oracle的不同表现(r12笔记第30天)

   今天有个朋友问我一个SQL问题,大体是一个update语句,看起来逻辑没有问题,但是执行的时候却总是报错. 语句和报错信息为: UPDATE payment_data rr    SET rr.penalty_date = '2017-4-12'  where rr.id =        (SELECT min(r.id)           FROM payment_data r          where data_no =                (SELECT data_

解析Sql :从update 语句中解析出select语句

问题描述 现在有一个任务,有一批的命令,都是update,insert,delete的批操作.还有一个要求,在执行操作时需要记录下更新数据的历史状态.例如:updatetab1setcol='**',col2='***'whereidin(selecttidfromtab2whereenable='Y ')我的处理是这样的:1.首先解析后得到:select*fromtab1whereidin(selecttidfromtab2whereenable='Y') 2.执行select将历史数据保存到

sql语句多表查询中聚合函数的使用问题

问题描述 sql语句多表查询中聚合函数的使用问题 表A,B,C. A表中有title,code, b表中为code,media_code;(均不为主键,code会有重复) c表中有media_code,shrink (media_code为主键) 我的目的为取出A表中的title和c表中的shrink 联立:A.code→B.code, B.media_code→C.media_code 代码如下 select title,shrink from tableA,tableC where medi

求问sql语句如何在添加中使用聚合函数

问题描述 求问sql语句如何在添加中使用聚合函数 设1表中有A.B两列,我想添加一组数据(c,d)进去(并没有C的值),其中c=A列最大值+1, 如何写sql语句? Ps.我知道如果只添加C可以这么写: insert into 1(A) select max(A)+1 from 1; 但是我想同时将数据d添加进去 解决方案 其实你已经知道方法了. insert into 1(A,B) select max(A),d from test; 在这里d要是一个常量值或者是test表的字段: 解决方案二

update错误,在messagebox中显示的sql语句如下,哪错了

问题描述 update错误,在messagebox中显示的sql语句如下,哪错了 update d set 1左=1 where 点数=0 d为表名,1左为列名,设置的类型为varchar(25),哪里错了 解决方案 列名干嘛用数字开头,难道你写程序的时候意识是迷糊的么? 解决方案二: update d set 1左='1' where 点数=0 确保字段类型正确

SQL Server UPDATE语句的用法详解_MsSql

SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用中数据库中的数据改动是免不了的.通常,几乎所有的用户数据库中的大部分数据都要进行某种程度的修改.在SQL Server数据库中要想修改数据库记录,就需要用UPDATE语句,UPDATE语句就是为了改变数据库中的现存数据而存在的.这条语句虽然有一些复杂的选项,但确实是最容易学习的语句之一.这是因为在大

SQL Server UPDATE语句的用法详解

SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用中数据库中的数据改动是免不了的.通常,几乎所有的用户数据库中的大部分数据都要进行某种程度的修改.在SQL Server数据库中要想修改数据库记录,就需要用UPDATE语句,UPDATE语句就是为了改变数据库中的现存数据而存在的.这条语句虽然有一些复杂的选项,但确实是最容易学习的语句之一.这是因为在大