我有一个包含这样的工作的表
id owner collaborator privilege
90 "919886297050" "919886212378" "read"
90 "919886297050" "919886297052" "read"
88 "919886297050" "919886212378" "read"
88 "919886297050" "919886297052" "read"
主键是id,所有者和协作者的组合 我想传递我想要保留的合作者的详细信息。例如,如果我的合作者=" 919886212378"这意味着我想删除" 919886297052"并保留" 919886212378"
的行有没有办法在一个查询/执行中执行此操作,而不是单独获取详细信息,然后在过滤缺失值后执行删除?
编辑:我的用例可能会添加新的协作者并删除旧的协作者。但是,我的输入只会包含一组选定的协作者,因此我需要与旧列表进行交叉检查,保留现有内容,添加新内容并删除缺少的协作者。
答案 0 :(得分:1)
DELETE FROM table WHERE collaborator NOT IN ("919886212378", "id ..")
对您提到的具体案例进行删除。但我不知道 你如何得到这些id。您提供的确切案例信息太少。 如果您可以通过查询获取这些ID,则可以将其设为子查询,如:
DELETE FROM table WHERE collaborator NOT IN (SELECT ... FROM ...)
答案 1 :(得分:0)
比较python中的新旧协作者列表对我来说是成功的秘诀
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) )
然后,我使用上面的两个列表在事务内使用插入和删除语句进行更新。