sql - PostgreSQL 删除记录

标签 sql postgresql

我有一个表,其中两个实体之间的关系是双向存储的。因此,如果 A 链接到 B,我有两条记录 - 一条代表 A > B,另一条代表 B > A.

test=# select * from myt;
 id | from_id | to_id 
----+---------+-------
  1 |       1 |     2
  2 |       2 |     1
  3 |       1 |     3
  4 |       3 |     1
(4 rows)

是否可以使用 SQL 删除记录,以便我只有记录来表示每个关系?

删除哪个并不重要。

最佳答案

您可以使用 using 子句来执行一种自连接:

DELETE FROM myt a
USING       myt b
WHERE       a.from_id = b.to_id AND a.to_id = b.from_id  -- The "join"
            AND a.from_id < b.from_id -- Make sure you don't delete both copies

关于sql - PostgreSQL 删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21529499/

相关文章:

mysql - 如何找到查询中第一次出现的值的行号?

ruby-on-rails - 为什么 PostgreSQL 告诉我模式不存在?

c# - Firebird EXECUTE BLOCK 从 c# 和 Flamerobin 中抛出错误 104

c# - 使用 EF 检查表中新记录的成本最低的操作

python - 我如何根据其他字段值更改 OpenERP 选择字段中的选项?

sql - 从查询中获取具有最大日期的行

postgresql - 如何分别执行两个查询?

sql - 从sqlite3导出表

php - 自动获取 : name_of_table. name_of_row 形式的列名称

mysql - 列的 SQL 约束