给出以下架构:
person:
id: ~
group:
id: ~
group_membership:
person_id: ~
group_id: ~
我试图使用 Propel 的 Criteria 查找不在某个组内的成员,以下 SQL 将执行此操作:
SELECT * FROM person
WHERE id NOT IN (
SELECT person_id FROM group_membership
WHERE group_id = 1
);
不幸的是,Propel 不支持子选择。可以先执行子选择并将其直接作为数组传递,但我宁愿在一次调用中完成。我发现本文,这建议使用自定义条件或将其转换为联接。
是否可以将上面的 SQL 转换为没有嵌套选择的单个 Join?
我认为这可能是子查询的替代品
SELECT *
FROM person
LEFT OUTER JOIN group_membership
ON person.id = group_membership.person_id
AND group_id = 1
WHERE group_membership.person_id is null
;
返回的行数person_id
为 null 表示行存在于person
但不在group_membership
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)