sql - 查询孤立关系

标签 sql postgresql

我必须清除使用 OmniAuth 的 Rails 应用程序中的孤立关联。为了简单起见,这里是一个精简的场景。

给定两个表:

users:
  password_id: INTEGER
  <more columns>

passwords:
  id: INTEGER NOT NULL
  password_digest: VARCHAR 

换句话说:有一个兼性的“用户属于_密码”关系。 (有充分的理由说明为什么这种关系不是相反的。)

通常,每个用户都与一个密码相关。但有时用户会被删除,相应的密码也会变得孤立。

是否有一种有效的方法可以通过 Postgres 上的一个 SQL 查询找到所有孤立的密码(换句话说:所有与任何用户无关的密码)?

感谢您的提示!

最佳答案

这种类型的查询称为反连接。最简单的方法是:

SELECT p.*
FROM passwords p
LEFT JOIN users u
    ON u.password_id = p.id
WHERE u.<primary key field> IS NULL;

另一种选择是@Politank-Z 提供的NOT EXISTS 方法。它们应该具有基本相同的查询计划。

关于sql - 查询孤立关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29833054/

相关文章:

postgresql - timescaleDB 是否可以使用 pglogical 进行逻辑复制?

PostgreSQL:在 WHERE 子句中使用子查询缩写 ('AS' )

php - postgresql/php 中的 SQL 语法错误

sql - SELECT * FROM Employees WHERE NULL IS NULL; SELECT * FROM 员工 WHERE NULL = NULL;

MySQL ORDER BY 随机字段不适用于附加操作

postgresql - 使用 dblink 查找最近 30 分钟时出错

postgresql - 具有 GenerationType.IDENTITY 的 JPA 和 PostgreSQL

mysql - 动态选择哪个表

sql - 无法将 varchar 转换为 float

python - 我正在尝试使用 brew 安装 postgresql,但找不到 Python.h