这是我有:SQL - 如何查询具有相反关系的相关对象的COUNT(0)的所有对象?
Person
name = varchar
Helmet
person = foreignkey -> Person
is_safe = boolean
现在,批作业,我需要查询(无ORM,只是原始SQL)对于具有0 Helmet
是安全的所有Person
。我显然可以循环遍历数据库中的每个Person
等,但我需要在一个查询中执行此操作,并一次将其限制为100(数据库中有这些吸盘的novemdecillions),并删除每个Person
。我不需要在结果中附加每个记录的Helmet
记录。我只需要Person
记录(自然删除将会级联),但我不能简单地发出DELETE
来代替我的SELECT
,因为在删除它们之前我需要在其他地方执行其他操作。
我使用Postgres的,但我宁愿使用一个查询,或多或少DB无关,如果可能的话。
这里就是我抽象地想出:
SELECT * FROM person
WHERE (SELECT COUNT(*) FROM helmet
WHERE person_id = person.id AND is_safe = false) = 0
LIMIT 100
这显然不是有效的SQL,但我希望有一个相同的功能,但有效的版本。
非常感谢。你能解释一下它是如何工作的(特别是其他的包装器'SELECT')? – orokusaki 2012-02-28 19:03:24
非常感谢Patrik – orokusaki 2012-02-28 19:12:40
不客气! – PatrikAkerstrand 2012-02-28 19:16:48