Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgreSQL:通过匹配行数据删除_Sql_Postgresql_Join_Sql Delete - Fatal编程技术网

postgreSQL:通过匹配行数据删除

postgreSQL:通过匹配行数据删除,sql,postgresql,join,sql-delete,Sql,Postgresql,Join,Sql Delete,我有一个SELECT语句的结果,我想使用该语句从具有相同数据的不同表中删除匹配行。我没有SELECT中的具体细节,只返回了行 例如,如果我有桌子 table_1 name | value -------------- Bob | 5 Ben | 14 Bev | 8 table_2 name | value -------------- Bob | 5 Bill | 2 Biff | 4 我得到了从第一个表中选择的结果,返回Bob的行,我如何使用它从第二个表中删除B

我有一个SELECT语句的结果,我想使用该语句从具有相同数据的不同表中删除匹配行。我没有SELECT中的具体细节,只返回了行

例如,如果我有桌子

table_1
name  | value
--------------
Bob   | 5
Ben   | 14
Bev   | 8


table_2
name  | value
--------------
Bob   | 5
Bill  | 2
Biff  | 4
我得到了从第一个表中选择的结果,返回Bob的行,我如何使用它从第二个表中删除Bob

编辑 为了更清楚地说明我在做什么,我有一个脚本,它正在遍历几对备份/活动表,并查找新的和更新的行,这就是我得到的选择部分—它是一个更改日志。现在,我需要删除一些新行,但我需要处理的只是更改日志中的原始数据和表名。对于插入,这不是问题:

INSERT INTO table_name <row data here>  -- Don't need column names

我希望DELETE能够通过匹配与EXCEPT子句工作方式类似的原始数据来实现类似的无模式删除功能。

我认为您正在寻找以下内容:

DELETE FROM table_2 WHERE (name, value) IN (
    SELECT name, value FROM table_1
)
这将搜索并删除表_2中名称和值至少与表_1中的一行匹配的行


如果有一个查询提供了要删除的名称、值元组列表,您可以用它来替换子查询。

您想使用原始SQL查询吗?原始SQL非常理想,但我愿意接受其他解决方案。是否可以将WHERE名称、值部分通配符为WHERE*?我的脚本无法访问该表internals@user2859458当前位置我不确定你的意思,但是。。。SQL无效。@user2859458:您所说的不容易访问表内部是什么意思。如果您可以选择或在本例中删除,则可以访问该表,除非存在列级访问要求,即行级安全性。感谢您的帮助。我正在处理的脚本可以针对多个表运行,并且编写为模式无关的。对于inserts,这不是问题:INSERT INTO table_name