diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/AliasTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/AliasTests.java index 97ffeea544..96961ffd33 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/AliasTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/AliasTests.java @@ -193,6 +193,13 @@ extends BaseTest b = TBookToBookStore().as("b"); diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java index e3d1913081..df87884803 100644 --- a/jOOQ/src/main/java/org/jooq/DSLContext.java +++ b/jOOQ/src/main/java/org/jooq/DSLContext.java @@ -4194,6 +4194,8 @@ public interface DSLContext { * .where(field1.greaterThan(100)) * .execute(); * + *

+ * Some but not all databases support aliased tables in delete statements. */ @Support @Transition( diff --git a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java index 9ac1f5122e..ebd358c96a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java @@ -36,6 +36,8 @@ package org.jooq.impl; +import static org.jooq.SQLDialect.MYSQL; + import java.util.Collection; import org.jooq.BindContext; @@ -101,7 +103,16 @@ class DeleteQueryImpl extends AbstractQuery implements DeleteQ public final void toSQL(RenderContext context) { boolean declare = context.declareTables(); - context.keyword("delete from "); + context.keyword("delete "); + + // [#2464] MySQL supports a peculiar multi-table DELETE syntax for aliased tables: + // DELETE t1 FROM my_table AS t1 + if (getFrom() instanceof TableAlias && context.configuration().dialect() == MYSQL) { + context.sql(getFrom()) + .sql(" "); + } + + context.keyword("from "); context.declareTables(true) .sql(getFrom()) .declareTables(declare);