【发布时间】:2012-02-28 18:54:08
【问题描述】:
这是我所拥有的:
Person
name = varchar
Helmet
person = foreignkey -> Person
is_safe = boolean
现在,对于批处理作业,我需要查询(没有 ORM,只是原始 SQL)所有具有 0 个安全的 Helmet 的 Person。我显然可以遍历数据库中的每个 Person 等,但我需要在单个查询中执行此操作并一次将其限制为 100 个(数据库中有这些吸盘的 novemdecillions),并删除每个Person。我不需要将每个Helmet 记录附加到结果中。我只需要Person 记录(自然删除会级联),但我不能简单地发出DELETE 来代替我的SELECT,因为在删除它们之前我需要在其他地方做一些事情。
我正在使用 Postgres,但如果可能的话,我更喜欢使用或多或少与数据库无关的查询。
这是我抽象的想法:
SELECT * FROM person
WHERE (SELECT COUNT(*) FROM helmet
WHERE person_id = person.id AND is_safe = false) = 0
LIMIT 100
这显然不是有效的 SQL,但我希望有一个功能等效但有效的版本。
【问题讨论】: