Подзапрос для присоединения к преобразованию

#postgresql #join #left-join #inner-join

#postgresql #Присоединиться #слева -соединение #внутреннее соединение

Вопрос:

Как мне преобразовать это с помощью запроса во внутреннее соединение или любого другого соединения? этот запрос отлично работает с WITH в SQL.

 with trr as(SELECT DISTINCT td.* FROM "groups" g inner join
"territoryDetails" td on td."groupId" = g.id where g."orgId" = 13),
tdd as(select trr."groupId" from contacts c inner join trr on
ST_Intersects(trr.points,c."geoPoint") where c.id = 567 and
c."orgId"=130) select * from tdd;
 

Комментарии:

1. Каков ваш актуальный вопрос здесь? Если у вас уже есть действительный рабочий запрос, то в чем проблема?

2. @Жестко Не связано, но: distinct td.* это запах кода. Это должно быть заменено более эффективным условием EXISTS между territorydetails и groups .

3. Пожалуйста, не вандализируйте свои собственные сообщения. Когда вы публикуете здесь, вы предоставляете SO право распространять контент в соответствии с CC-by SA 4.0. Любой вандализм будет отменен.

4. Пожалуйста, не создавайте больше работы для других людей, вандализируя свои сообщения. Размещая в сети Stack Exchange, вы предоставляете Stack Exchange не подлежащее отзыву право в соответствии с лицензией CC BY-SA 4.0 на распространение этого контента (т. Е. Независимо от вашего будущего выбора). Согласно политике обмена стеками, распространяется версия post, не подвергшаяся вандализму. Таким образом, любой вандализм будет отменен. Если вы хотите узнать больше об удалении записи, пожалуйста, смотрите: Как работает удаление?

Ответ №1:

Ну, ваш текущий запрос на основе CTE на самом деле уже использует объединения, но я подозреваю, что проблема заключается в использовании самого CTE. Вы можете реорганизовать запрос, вставив и удалив все CTE:

 SELECT trr.groupId
FROM contacts c
INNER JOIN
(
    SELECT DISTINCT td.*
    FROM groups g
    INNER JOIN territoryDetails td ON td.groupId = g.id
    WHERE g.orgId = 13
) trr
    ON ST_Intersects(trr.points, c.geoPoint)
WHERE
    c.id = 567 AND c.orgId = 130;
 

Комментарии:

1. спасибо .. это сработало .. и я узнал кое-что новое!!