delete 語句帶別名問題.

babyyellow發表於2021-12-16


mysql 8.0  版本: 


delete from  table1 s 

where project_id = ? 

and not exists (select project_id from table2 u 

                          where u.project_id = s.project_id 

                        and s.delivery_date = u.use_date)


這個sql 執行一點問題都沒有. 


這個sql  在 5.6  或者5.7 上跑是有問題的. 


報錯: 

 

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; 

bad SQL grammar [delete from table1 s 

 where project_id = ? and not exists (select project_id from table2  u

 where u.project_id = s.project_id 

and s.delivery_date = u.use_date)]; 

nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's where project_id = 330 and not exists (select project_id from ijk_project_uplo' at line 1


報錯了.  找不到 s 表. 


這個是解析器的一個曲缺陷.   丟掉了  meta資訊 ,不知道  s 是table1  的別名. 


修改方法: 


1)  


delete    s    from  table1 s 

where project_id = ? 

and not exists (select project_id from table2 u 

                          where u.project_id = s.project_id 

                        and s.delivery_date = u.use_date)


2)     直接去掉 s  子查詢 用table1  


delete from  table1 

where project_id = ? 

and not exists (select project_id from table2 u 

                          where u.project_id =table1.project_id 

                        and table1.delivery_date = u.use_date)





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2848072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章