我必须清除使用 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/