将 Not In Sub-Select 重写为 Join for Propel

2023-11-30

给出以下架构:

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(使用前将#替换为@)

将 Not In Sub-Select 重写为 Join for Propel 的相关文章

随机推荐