diff --git a/changes/1.5.0.md b/changes/1.5.0.md
index f4e9665a9aef32569c3885648d90eaa5668442aa..17e5f5ace8c799736431b81bc760c3239cc58ea3 100644
--- a/changes/1.5.0.md
+++ b/changes/1.5.0.md
@@ -87,6 +87,7 @@ Seata 鏄竴娆惧紑婧愮殑鍒嗗竷寮忎簨鍔¤В鍐虫柟妗堬紝鎻愪緵楂樻€ц兘鍜岀畝鍗�
   - [[#3589](https://github.com/seata/seata/pull/3589)] 浣跨敤JUnit API鍋氬紓甯告鏌�
   - [[#3601](https://github.com/seata/seata/pull/3601)] 浣縛LoadBalanceProperties`涓巂spring-boot:2.x`鍙婁互涓婄増鏈吋瀹�
   - [[#3631](https://github.com/seata/seata/pull/3631)] 浼樺寲 杩愯 nacos-config.py 鍙傛暟闂
+  - [[#3638](https://github.com/seata/seata/pull/3638)] 浼樺寲浣跨敤杩炶〃update鍜宒elete鐨凷QL璇硶鏃堕敊璇彁绀�
 
 
   ### test
diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md
index 77fe481712c04b12e1dc39c6ac5a3fe518503dc0..91c7f2b7226d1fdb13fd0a8d941f2047711ebc33 100644
--- a/changes/en-us/1.5.0.md
+++ b/changes/en-us/1.5.0.md
@@ -88,6 +88,7 @@
   - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage
   - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above
   - [[#3631](https://github.com/seata/seata/pull/3631)] optimize  nacos-config.py  parameter
+  - [[#3638](https://github.com/seata/seata/pull/3638)] optimize the error when use update or delete with join in sql
 
   ### test	
 
diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java
index 6dcf19870e37867cd72b339bc4eb3df231723b3d..c6b542131ccd8b7ca993e2484016c1ad3f13d7d0 100644
--- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java
+++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java
@@ -18,9 +18,12 @@ package io.seata.sqlparser.druid.mysql;
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.SQLStatement;
 import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLTableSource;
 import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement;
 import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
 
+import io.seata.common.exception.NotSupportYetException;
 import io.seata.sqlparser.ParametersHolder;
 import io.seata.sqlparser.SQLDeleteRecognizer;
 import io.seata.sqlparser.SQLType;
@@ -71,11 +74,25 @@ public class MySQLDeleteRecognizer extends BaseMySQLRecognizer implements SQLDel
                 printTableSourceExpr(x.getExpr());
                 return false;
             }
+
+            @Override
+            public boolean visit(SQLJoinTableSource x) {
+                throw new NotSupportYetException("not support the syntax of delete with join table");
+            }
         };
+        SQLTableSource tableSource;
         if (ast.getFrom() == null) {
-            visitor.visit((SQLExprTableSource) ast.getTableSource());
+            tableSource = ast.getTableSource();
+        } else {
+            tableSource = ast.getFrom();
+        }
+
+        if (tableSource instanceof SQLExprTableSource) {
+            visitor.visit((SQLExprTableSource) tableSource);
+        } else if (tableSource instanceof SQLJoinTableSource) {
+            visitor.visit((SQLJoinTableSource) tableSource);
         } else {
-            visitor.visit((SQLExprTableSource) ast.getFrom());
+            throw new NotSupportYetException("not support the syntax of delete with unknow");
         }
         return sb.toString();
     }
diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java
index 1dc1935a4142d35aa260c90945410231a62c5290..4bb9c019d4cfd1db7b9c911f5a61eaa796f9e850 100644
--- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java
+++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java
@@ -22,10 +22,13 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
 import com.alibaba.druid.sql.ast.expr.SQLValuableExpr;
 import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
 import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLTableSource;
 import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem;
 import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement;
 import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
 
+import io.seata.common.exception.NotSupportYetException;
 import io.seata.sqlparser.ParametersHolder;
 import io.seata.sqlparser.SQLParsingException;
 import io.seata.sqlparser.SQLType;
@@ -128,9 +131,21 @@ public class MySQLUpdateRecognizer extends BaseMySQLRecognizer implements SQLUpd
                 printTableSourceExpr(x.getExpr());
                 return false;
             }
+
+            @Override
+            public boolean visit(SQLJoinTableSource x) {
+                throw new NotSupportYetException("not support the syntax of update with join table");
+            }
         };
-        SQLExprTableSource tableSource = (SQLExprTableSource)ast.getTableSource();
-        visitor.visit(tableSource);
+
+        SQLTableSource tableSource = ast.getTableSource();
+        if (tableSource instanceof SQLExprTableSource) {
+            visitor.visit((SQLExprTableSource) tableSource);
+        } else if (tableSource instanceof SQLJoinTableSource) {
+            visitor.visit((SQLJoinTableSource) tableSource);
+        } else {
+            throw new NotSupportYetException("not support the syntax of update with unknow");
+        }
         return sb.toString();
     }
 
diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java
index fd7e85eccb4202467e4ad0320e3194e0a15b92ce..76ca2c5d65b8ea4e7c430afb357670081ef9fcda 100644
--- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java
+++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java
@@ -18,9 +18,12 @@ package io.seata.sqlparser.druid.oracle;
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.SQLStatement;
 import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLTableSource;
 import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement;
 import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor;
 
+import io.seata.common.exception.NotSupportYetException;
 import io.seata.sqlparser.ParametersHolder;
 import io.seata.sqlparser.SQLDeleteRecognizer;
 import io.seata.sqlparser.SQLType;
@@ -68,8 +71,26 @@ public class OracleDeleteRecognizer extends BaseOracleRecognizer implements SQLD
                 printTableSourceExpr(x.getExpr());
                 return false;
             }
+
+            @Override
+            public boolean visit(SQLJoinTableSource x) {
+                throw new NotSupportYetException("not support the syntax of delete with join table");
+            }
         };
-        visitor.visit((SQLExprTableSource)ast.getTableSource());
+        SQLTableSource tableSource;
+        if (ast.getFrom() == null) {
+            tableSource = ast.getTableSource();
+        } else {
+            tableSource = ast.getFrom();
+        }
+
+        if (tableSource instanceof SQLExprTableSource) {
+            visitor.visit((SQLExprTableSource) tableSource);
+        } else if (tableSource instanceof SQLJoinTableSource) {
+            visitor.visit((SQLJoinTableSource) tableSource);
+        } else {
+            throw new NotSupportYetException("not support the syntax of delete with unknow");
+        }
         return sb.toString();
     }
 
diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java
index 896f7ec912ba1caadf849ef83110eb067e057bf2..3a7313c7ec001c28283cb6c4471a2b88ae1c850c 100644
--- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java
+++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java
@@ -25,10 +25,13 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
 import com.alibaba.druid.sql.ast.expr.SQLValuableExpr;
 import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
 import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLTableSource;
 import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem;
 import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement;
 import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor;
 
+import io.seata.common.exception.NotSupportYetException;
 import io.seata.sqlparser.ParametersHolder;
 import io.seata.sqlparser.SQLParsingException;
 import io.seata.sqlparser.SQLType;
@@ -128,9 +131,20 @@ public class OracleUpdateRecognizer extends BaseOracleRecognizer implements SQLU
                 printTableSourceExpr(x.getExpr());
                 return false;
             }
+
+            @Override
+            public boolean visit(SQLJoinTableSource x) {
+                throw new NotSupportYetException("not support the syntax of update with join table");
+            }
         };
-        SQLExprTableSource tableSource = (SQLExprTableSource)ast.getTableSource();
-        visitor.visit(tableSource);
+        SQLTableSource tableSource = ast.getTableSource();
+        if (tableSource instanceof SQLExprTableSource) {
+            visitor.visit((SQLExprTableSource) tableSource);
+        } else if (tableSource instanceof SQLJoinTableSource) {
+            visitor.visit((SQLJoinTableSource) tableSource);
+        } else {
+            throw new NotSupportYetException("not support the syntax of update with unknow");
+        }
         return sb.toString();
     }
 
diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java
index 3b76e0f63baaa0e61850f032222f6ef24b89b6a1..8d45d786993f00f628cfab7c40929b76e8fd889f 100644
--- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java
+++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java
@@ -18,8 +18,11 @@ package io.seata.sqlparser.druid.postgresql;
 import com.alibaba.druid.sql.ast.SQLExpr;
 import com.alibaba.druid.sql.ast.SQLStatement;
 import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLTableSource;
 import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement;
 import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
+import io.seata.common.exception.NotSupportYetException;
 import io.seata.sqlparser.ParametersHolder;
 import io.seata.sqlparser.SQLDeleteRecognizer;
 import io.seata.sqlparser.SQLType;
@@ -64,8 +67,26 @@ public class PostgresqlDeleteRecognizer extends BasePostgresqlRecognizer impleme
                 printTableSourceExpr(x.getExpr());
                 return false;
             }
+
+            @Override
+            public boolean visit(SQLJoinTableSource x) {
+                throw new NotSupportYetException("not support the syntax of delete with join table");
+            }
         };
-        visitor.visit((SQLExprTableSource) ast.getTableSource());
+        SQLTableSource tableSource;
+        if (ast.getFrom() == null) {
+            tableSource = ast.getTableSource();
+        } else {
+            tableSource = ast.getFrom();
+        }
+
+        if (tableSource instanceof SQLExprTableSource) {
+            visitor.visit((SQLExprTableSource) tableSource);
+        } else if (tableSource instanceof SQLJoinTableSource) {
+            visitor.visit((SQLJoinTableSource) tableSource);
+        } else {
+            throw new NotSupportYetException("not support the syntax of delete with unknow");
+        }
         return sb.toString();
     }
 
diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java
index 715c58ee94a340acd1ca139b66d3873dc06302b8..3e8b35a332c5d5ed86e90f89df261f05fca81b4d 100644
--- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java
+++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java
@@ -22,9 +22,12 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
 import com.alibaba.druid.sql.ast.expr.SQLValuableExpr;
 import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
 import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
+import com.alibaba.druid.sql.ast.statement.SQLTableSource;
 import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem;
 import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement;
 import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
+import io.seata.common.exception.NotSupportYetException;
 import io.seata.sqlparser.ParametersHolder;
 import io.seata.sqlparser.SQLParsingException;
 import io.seata.sqlparser.SQLType;
@@ -124,9 +127,20 @@ public class PostgresqlUpdateRecognizer extends BasePostgresqlRecognizer impleme
                 printTableSourceExpr(x.getExpr());
                 return false;
             }
+
+            @Override
+            public boolean visit(SQLJoinTableSource x) {
+                throw new NotSupportYetException("not support the syntax of update with join table");
+            }
         };
-        SQLExprTableSource tableSource = (SQLExprTableSource) ast.getTableSource();
-        visitor.visit(tableSource);
+        SQLTableSource tableSource = ast.getTableSource();
+        if (tableSource instanceof SQLExprTableSource) {
+            visitor.visit((SQLExprTableSource) tableSource);
+        } else if (tableSource instanceof SQLJoinTableSource) {
+            visitor.visit((SQLJoinTableSource) tableSource);
+        } else {
+            throw new NotSupportYetException("not support the syntax of update with unknow");
+        }
         return sb.toString();
     }