亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysql中update后面跟select語句出錯

mysql中update后面跟select語句出錯

慕粉1600176492 2018-05-06 20:03:27
sc?表?有三個字段? sno?學號? ?cno?課程號? grade?成績我想讓0821102同學的C001課程成績改變成該門課程的平均成績,于是我這樣寫:UPDATE?scSET?grade?=?( SELECT AVG(grade) FROM sc WHERE cno?=?'C001' GROUP?BY cno)?WHERE sno?=?'0821102'最后提示:[Err] 1093 - You can't specify target table 'sc' for update in FROM clause于是我查到看到網上有些博客說是不能同時select和update同一個表,于是我改成這樣:UPDATE?scSET?grade?=?( SELECT?sc1.grade?from?( SELECT AVG(grade) FROM sc WHERE cno?=?'C001' GROUP?BY cno )sc1)?WHERE sno?=?'0821102'結果又提示[Err] 1054 - Unknown column 'sc1.grade' in 'field list'這是怎么回事啊,找了很久原因都沒找到
查看完整描述

2 回答

已采納
?
慕桂英2170621

TA貢獻9條經驗 獲得超8個贊

你這個sc1.grade 給它命名別名了嗎,又沒有別名又沒有定義MySQL引擎語法上肯定不識別啊

你可以參考下這樣寫就可以了。MySQL 已經執行成功的,以下代碼可以直接復制你查詢實現下:

?create table sc(

?sno varchar(20) primary key not null,

?cno varchar(20),

?grade float(6,2) unsigned

?);?

?insert into sc values('a001','c01',88.5);

?insert into sc values('a002','c01',78.5);

?insert into sc values('a002','c01',78.5);

?insert into sc values('a003','c01',68.5);

?insert into sc values('a004','c01',58.5);

?insert into sc values('a005','c01',18.5);

?insert into sc values('a006','c02',18.5);

?insert into sc values('a007','c02',28.5);

?insert into sc values('a008','c02',38.5);

?insert into sc values('a009','c02',78.5);

?insert into sc values('a010','c03',78.5);

?insert into sc values('a011','c03',48.5);

?insert into sc values('a012','c03',49.5);

?insert into sc values('a013','c04',100);

?insert into sc values('a014','c04',90);

mysql> update sc set grade=(select sc1_avg_grade from((select avg(grade) as sc1_

avg_grade from sc where cno='c01' group by cno) as sc1) ) where cno='c01';

Query OK, 5 rows affected (0.04 sec)

Rows matched: 5 ?Changed: 5 ?Warnings: 0

采納的話別忘記給分喲,親

?


查看完整回答
1 反對 回復 2018-05-06
?
慕桂英2170621

TA貢獻9條經驗 獲得超8個贊

簡單理解為avg(grade) as sc1_avg_grade,為平均成績avg(grade)命名別名sc1_avg_grade,

同時(select avg(grade) as sc1_avg_grade from sc where cno='c01' group by cno) as sc1 為這個結果集的表也命名個別名sc1,

查詢這個別名即可,對這個sc1表進行操作即可,就不會沖突


查看完整回答
2 反對 回復 2018-05-06
  • 2 回答
  • 0 關注
  • 2367 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號