看板 Database 關於我們 聯絡資訊
※ 引述《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