※ 引述《DarkKiller (System hacked)》之銘言:
: ※ 引述《dcplay01 (dcplay)》之銘言:
: : 上面這段可以查詢
: : 可是我想套用上面的查詢結果 放在新的資料表calculate 的liberal_grade欄位名稱上
: : 我用
: : UPDATE calculate SET liberal_grade= avg(grade)
: : FROM JoinClass j1
: : JOIN calculate c1 ON j1.stu_id = c1.stu_id
: : WHERE course_id
: : LIKE "%l" OR course_id
: : LIKE "%a" OR course_id
: : LIKE "%n" OR course_id
: : LIKE "%p" AND j1.stu_id =93101163
: http://dev.mysql.com/doc/refman/5.1/en/update.html
: Currently, you cannot update a table and select from the same table
: in a subquery.
: UPDATE 時所更新的表格不能與 JOIN 所用到的表格重疊。
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.113.54.119
: 推 dcplay01:所以不能用別張資料表的查詢結果放置到新資料表的欄位中? 01/24 19:34
如果要確保資料的正確性,可以用 Transaction 做,不過你必須用 InnoDB 或
BDB (MySQL 5.1 以及之後版本不支援)。
BEGIN;
SELECT stu_id FROM ... WHERE ... FOR UPDATE;
UPDATE ... SET ... WHERE stu_id = [剛剛的學號];
COMMIT;
如果堅持用 MyISAM 做,則可以用 LOCK TABLE:
LOCK TABLE ...;
SELECT stu_id FROM ... WHERE ...;
UPDATE ... SET ... WHERE stu_id = [剛剛的學號];
UNLOCK TABLE;
印象中是這樣做...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.54.119