首页 > 解决方案 > 删除 MySQL 和 PostgreSQL 的查询区别

问题描述

我正在从 MySQL 切换到 PostgreSQL,mysql 上的这个删除查询在 postgresql 中显示错误:

DELETE c FROM customers_vs_coupons c JOIN coupons d ON c.coupon_id=d.id WHERE d.company_id = ?1



ERROR:  syntax error at or near "c"
LINE 1: DELETE c FROM customers_vs_coupons c JOIN coupons d ON c.cou...
               ^
SQL state: 42601
Character: 8

我可以通过将查询更改为

DELETE FROM customers_vs_coupons USING customers_vs_coupons AS c JOIN coupons AS d ON c.coupon_id=d.id WHERE d.company_id = 1;

但想知道为什么它会抛出错误?

标签: mysqlpostgresqlsyntaxsql-delete

解决方案


因为该 SQL 语法不符合 SQL 标准:

第 14 章第 7 节说:

14.7 <删除语句:搜索>

功能

删除表的行。

格式

<delete statement: searched> ::=
    DELETE FROM <target table> [ [ AS ] <correlation name> ]
    [ WHERE <search condition> ]

推荐阅读