首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅保留特定行psycopg2

仅保留特定行psycopg2
EN

Stack Overflow用户
提问于 2018-06-18 20:27:37
回答 2查看 31关注 0票数 0

我有一个表,其中包含这样的作业

代码语言:javascript
运行
复制
id   owner          collaborator    privilege 
90  "919886297050"  "919886212378"  "read"
90  "919886297050"  "919886297052"  "read"
88  "919886297050"  "919886212378"  "read"
88  "919886297050"  "919886297052"  "read"

主键是id、所有者和协作者的组合,我只想传递我想要保留的协作者的详细信息。例如,如果我的协作者= "919886212378“,这意味着我想删除"919886297052”的行,并保留"919886212378“的行。

有没有办法在一次查询/执行中做到这一点,而不是单独获取详细信息,然后在过滤缺少的值后执行删除?

编辑:我的用例可能添加了新的协作者,删除了旧的协作者。但是,我的输入将只有一组选定的协作者,因此我需要与旧列表交叉检查,保留现有的,添加新的和删除丢失的协作者。

EN

回答 2

Stack Overflow用户

发布于 2018-06-18 20:37:41

代码语言:javascript
运行
复制
DELETE FROM table WHERE collaborator NOT IN ("919886212378", "id ..")

针对您提到的特定情况执行删除操作。但我不知道你是怎么弄到这些身份证的。你提供的信息太少了。如果您可以通过查询获得这些id,则可以将其作为子查询,如下所示:

代码语言:javascript
运行
复制
DELETE FROM table WHERE collaborator NOT IN (SELECT ... FROM ...)
票数 1
EN

Stack Overflow用户

发布于 2018-06-21 14:13:13

比较python中的新旧合作者列表对我来说很管用。

代码语言:javascript
运行
复制
    original_list = ["C1","C2","C3","C4"] // result from query
    updated_list= ["C1","C6","C7"] // list obtained from request


    # compute the differences   
    to_be_added  = set(updated_list).difference(set(original_list) )
    to_be_deleted  = set(original_list).difference(set(updated_list) )

然后,我在使用上述两个列表的事务中使用insert和delete语句进行更新。

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

https://stackoverflow.com/questions/50909519

复制
相关文章

相似问题

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