PostgreSQL неоднозначный запрос при удалении и присоединении? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть следующий запрос

DELETE FROM bookings 
    where "bookings"."memberId" IN (
      select "memberId" from "bookings"
      join "memberRoles" on "memberRoles"."memberId" = "bookings"."memberId"
      where "bookings"."memberId" = 1234
      and "bookings"."state" = 'MATCHED'
      and "memberRoles"."roleId" in (354,326,184)
    );

мой ожидаемый вывод будет состоять в том, чтобы удалить все, что я попросил удалить, однако, оно возвращает ошибку в моем SELECT внутри IN, ошибка ERROR: column reference "memberId" is ambiguous

Я пытался сделать select "bookings"."memberId", но тогда он скажет

ERROR: syntax error at or near "join"

Есть идеи?

1 Ответ

0 голосов
/ 11 июля 2019

Укажите все имена столбцов.Я бы порекомендовал псевдонимы таблиц:

DELETE FROM bookings b
    where b."memberId" IN (
      select b2."memberId"
      from "bookings" b2 join
           "memberRoles" mr
           on mr."memberId" = b2."memberId"
      where b2."memberId" = 1234 and
            b2."state" = 'MATCHED' and
            mr."roleId" in (354, 326, 184)
    );

Я не думаю, что вам нужно in для этого, хотя.Вы можете проверить это:

DELETE bookings b
    FROM "memberRoles" mr
    WHERE mr."memberId" = b."memberId" AND
          b."memberId" = 1234 AND
          b."state" = 'MATCHED' AND
          mr."roleId" in (354, 326, 184);
...