Самостоятельное соединение подзапроса

Мне было интересно, возможно ли объединить результат запроса с самим собой?

(Я использую PostgreSQL)

 Nathan Koop25 мая 2009 г., 18:48
Не могли бы вы привести пример того, что вы пытаетесь сделать?

Ответы на вопрос(3)

Да, просто псевдоним запросов:

SELECT  *
FROM    (
        SELECT  *
        FROM   table
        ) t1
JOIN    (
        SELECT  *
        FROM   table
        ) t2
ON      t1.column < t2.other_column
Решение Вопроса

Вы можете сделать это с WITH:

WITH subquery AS(
    SELECT * FROM TheTable
) 
SELECT *
FROM subquery q1
JOIN subquery q2 on ...

Или создав VIEW, который содержит запрос, и присоединившись к нему:

SELECT *
FROM TheView v1
JOIN TheView v2 on ...

Или подход грубой силы: введите подзапрос дважды:

SELECT *
FROM (
    SELECT * FROM TheTable
) sub1
LEFT JOIN (
    SELECT * FROM TheTable
) sub2 ON ...
 markusk25 мая 2009 г., 19:03
PostgreSQL не поддерживает запросы WITH в последней версии 8.3, согласноpostgresql.org/docs/8.3/interactive/....
 Alex Martelli25 мая 2009 г., 19:08
Если вы можете обновить до 8.4, в настоящее время в бета-версии, СО, наконец, там, см.postgresql.org/docs/8.4/static/queries-with.html
 Joril26 мая 2009 г., 10:01
Поскольку мой подзапрос несколько сложен, я сначала попробую с представлением, а затем с решением "грубой силы". В конце концов я переключусь на использование WITH, когда выйдет pgsql 8.4 :) Большое спасибо всем!

результат запроса к таблице, к той же таблице. Если это так, то да, это возможно ... например

--Bit of a contrived example but...
SELECT * 
FROM Table
INNER JOIN
(
    SELECT 
          UserID, Max(Login) as LastLogin
    FROM
          Table
    WHERE 
          UserGroup = 'SomeGroup'
    GROUP BY
          UserID

) foo
ON Table.UserID = Foo.UserID AND Table.Login = Foo.LastLogin
 Alex Martelli25 мая 2009 г., 19:11
Это нормально AFAICS (за исключением, может быть, конфликта между 'foo' и 'Foo' ;-).
 Eoin Campbell25 мая 2009 г., 18:55
Извините, только что заметил ваш комментарий "Я использую PostGres". Не уверен, что вышеприведенное является синтаксически правильным в postgres.
 Joril26 мая 2009 г., 09:09
@Eoin: Ну, я имел в виду присоединение кРезультаты запросов, но все равно спасибо за помощь :)

Ваш ответ на вопрос