Перезапись не выбрана в качестве присоединения для Propel - PullRequest
1 голос
/ 29 июля 2011

Учитывая следующую схему:

person:
  id: ~
group:
  id: ~
group_membership:
  person_id: ~
  group_id: ~

Я пытаюсь найти членов, не входящих в определенную группу, используя критерии Propel, что будет делать следующий SQL:

SELECT * FROM person
WHERE id NOT IN (
  SELECT person_id FROM group_membership
  WHERE group_id = 1
);

К сожалению,Propel не поддерживает суб-выбор.Возможно выполнить предварительный выбор сначала и передать его непосредственно как массив, но я бы предпочел сделать это за один вызов.Я нашел эту статью , в которой предлагается использовать пользовательские критерии или преобразовать их в объединение.

Можно ли преобразовать вышеуказанный SQL в одно объединение без вложенных выборок?

1 Ответ

2 голосов
/ 29 июля 2011

Я думаю, что это может заменить подзапрос

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 равен нулю, указывают на то, что строки существуют в person, но не в group_membership

...