首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgresql查询删除所有行。

Postgresql查询删除所有行。
EN

Stack Overflow用户
提问于 2020-06-02 21:17:21
回答 1查看 52关注 0票数 0

我在一个带有delete子句、left joinwhere子句的PostgreSQL函数中编写了一个简单的left join查询。但是查询没有考虑where条件。它删除所有行。

我编写了两种类型的查询,它们都产生相同的结果。

查询1

代码语言:javascript
运行
复制
delete from "StockInfos" using "StockInfos" as si
    left outer join "PurchaseOrderInfos" as poi on poi."Id" = si."PurchaseOrderInfoId"
    left outer join "ReceivingInfos" as ri on ri."PurchaseOrderInfoId" = poi."Id"
 where ri."Id" = (delete_data->>'Id')::bigint;

查询2

代码语言:javascript
运行
复制
delete from "StockInfos" where exists (
            select * from "StockInfos" as si
                left join "PurchaseOrderInfos" as poi on poi."Id" = si."PurchaseOrderInfoId"
                left outer join "ReceivingInfos" as ri on ri."PurchaseOrderInfoId" = poi."Id"
            where ri."Id" = (delete_data->>'Id')::bigint
        );

我不明白是什么问题。有人能告诉我出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 21:24:14

我会用一个相关的子查询来重新表述这一点。这使得逻辑更加清晰,并且应该做您想做的事情:

代码语言:javascript
运行
复制
delete from "StockInfos" si
where exists (
    select 1
    from "PurchaseOrderInfos" poi
    inner join "ReceivingInfos" as ri on ri."PurchaseOrderInfoId" = poi."Id"
    where 
        oi."Id" = si."PurchaseOrderInfoId"
        and ri."Id" = (si.delete_data->>'Id')::bigint

)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62161562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档