Postgresql使用Join进行删除
Postgresql使用Join进行删除
DELETE B.*
FROM m_productprice B
INNER JOIN m_product C ON B.m_product_id = C.m_product_id
WHERE C.upc = '7094' AND B.m_pricelist_version_id = '1000020'
我得到了以下错误PostgreSQL 8.2.11
ERROR: 语法错误在或附近 "B"
LINE 1: DELETE B.* from m_productprice B INNER JOIN m_product C ON ...
我尝试给出
DELETE B from m_productprice B INNER JOIN m_product C ON B....
ERROR: 语法错误在或附近 "B"
我尝试给出
ERROR: 语法错误在或附近 "INNER"
LINE 1: DELETE from m_productprice B INNER JOIN m_product C ON B.m_...
我的查询有什么问题?
问题的出现原因:在PostgreSQL中,使用JOIN来执行DELETE操作会导致语法错误或无法正常工作。因此,需要采用其他方法来实现DELETE与JOIN的结合。
解决方法:根据PostgreSQL官方文档中推荐的方法,可以使用子查询来替代JOIN操作,从而实现DELETE与JOIN的结合。具体而言,可以使用以下方式来执行DELETE操作:
DELETE FROM m_productprice WHERE m_pricelist_version_id='1000020' AND m_product_id IN (SELECT m_product_id FROM m_product WHERE upc = '7094');
这种方法不仅在PostgreSQL中有效,还可以在其他数据库中正常工作。因此,使用子查询替代JOIN操作是一种通用且可行的解决方案。
PostgreSQL中的Delete with Join问题出现的原因是当你有多个连接时,使用逗号分隔的USING语句可以解决这个问题。在上面的例子中,我们可以看到使用了AAA,BBB和CCC三个表进行连接。通过使用"USING BBB AS b, CCC AS c"将多个表连接起来。
解决方法是在DELETE语句中使用USING语句来连接多个表。在例子中,使用了a.id = b.id和a.id = c.id这两个条件来连接AAA表和BBB表以及CCC表。另外,还可以添加其他条件来进一步筛选需要删除的数据,如a.uid = 12345和c.gid = 's434sd4'。
这里提供的代码示例来源于Drupal网站的文档,它展示了如何在PostgreSQL中使用DELETE语句进行多表连接删除操作。在这个例子中,我们使用了AAA表、BBB表和CCC表,并根据特定条件删除了符合条件的数据。
总结起来,解决PostgreSQL中Delete with Join问题的方法是使用USING语句将多个表连接起来,并根据需要添加连接条件和删除条件来完成删除操作。这样可以轻松地删除满足条件的数据,提高数据库的维护效率。
参考链接:[https://www.drupal.org/docs/7/guidelines-for-sql/writing-code-compliant-with-both-mysql-and-postgresql/mysqlism-and-0](https://www.drupal.org/docs/7/guidelines-for-sql/writing-code-compliant-with-both-mysql-and-postgresql/mysqlism-and-0)
PostgreSQL Delete with Join
在使用PostgreSQL进行删除操作时,有时候需要使用JOIN语句来连接多个表并删除符合条件的记录。这种情况下,我们需要考虑删除操作的原因以及解决方法。
在给定的例子中,我们想要删除m_productprice表中满足条件的记录。条件是m_productprice表中的m_pricelist_version_id字段等于'1000020',并且对应的m_product表中的upc字段等于'7094'。我们可以看到两种不同的删除操作方法。
第一种方法是使用USING子句来连接m_productprice和m_product表,并在连接条件中指定相应的字段。通过这种方式,我们可以在删除操作中使用多个字段进行匹配,从而实现更精确的删除。
第二种方法是使用子查询来获取符合条件的m_product_id,并将其作为IN子句的参数来删除m_productprice表中的记录。这种方法在不同的数据库中都可以使用,但是可能会比第一种方法稍慢。
对于较大的表,第一种方法可能更快,因为它可以直接通过连接来进行删除操作,而不需要额外的查询操作。然而,第二种方法更加通用,可以在所有数据库中使用。
总结起来,通过使用JOIN语句来连接多个表并删除符合条件的记录可以提供更灵活和高效的删除操作。根据具体的需求和数据库类型,我们可以选择合适的方法来进行删除操作。