Postgres - 删除连接,使用给出错误

Posted

技术标签:

【中文标题】Postgres - 删除连接,使用给出错误【英文标题】:Postgres - DELETE JOIN, USING giving error 【发布时间】:2019-02-13 15:10:49 【问题描述】:

所以 Postgres 中似乎没有 DELETE JOINs,所以我尝试使用 USING

DELETE FROM
    creator.list_items li
USING
    creator.lists l
USING
    item_instances ii
WHERE
    li.list_id = l._id
    AND
    li.item_instance_id = ii._id
    AND
    ii.item_id IN ($1:list)
    AND
    l._id = $2
    AND
    l.account_id = $3

但它只是给了我错误:

ERROR:  syntax error at or near "USING"
LINE 5:                 USING

我的原始查询:

DELETE 
    li
FROM
    creator.list_items li
JOIN
    creator.lists l
    ON
        li.list_id = l._id
JOIN
    item_instances ii
    ON
        li.item_instance_id = ii._id
WHERE
    ii.item_id IN ($1:list)
    AND
    l._id = $2
    AND
    l.account_id = $3

【问题讨论】:

using 关键字只能使用一次,就像 e.g. where 关键字。 PostgreSQL delete with inner join的可能重复 @Jens 所以我的查询中有两个USINGs,这是否意味着我只需要在WHERE 部分使用更多SELECT 【参考方案1】:

您实际上可以在USING 子句中使用JOIN

DELETE FROM
    creator.list_items li
USING creator.lists l JOIN
      item_instances ii
      ON li.list_id = l._id
WHERE li.item_instance_id = ii._id AND
      ii.item_id IN ($1:list) AND
      l._id = $2 AND
      l.account_id = $3;

【讨论】:

对于我得到的那个查询:HINT: There is an entry for table "li", but it cannot be referenced from this part of the query. 需要切换 iili 以消除错误。 等一下,我搞砸了,那只会从item_instances中删除,所以问题仍然存在 @a_horse_with_no_name 我之前做了一个编辑,我指的是不正确的,你可以查看编辑历史。【参考方案2】:

我的正常查询:

DELETE FROM
    creator.list_items li
USING 
    creator.lists l 
WHERE 
    li.item_instance_id 
        IN 
        (
            SELECT
                _id
            FROM
                creator.item_instances
            WHERE
                item_id IN ($1:list) 
        )
    AND
    li.list_id = $2 
    AND
    li.list_id = l._id
    AND
    l.account_id = $3

【讨论】:

以上是关于Postgres - 删除连接,使用给出错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将strapi、graphql和postgres连接在一起?

从 postgres 表中提取 json 数组给出错误:无法从标量中提取元素

postgres不断给出“模式不存在”错误[重复]

从java调用带有UDT参数的postgres函数给SQL尚未实现异常

postgres 上的错误转换连接

你好 postgres 数据库连接错误 Ruby on rails