Me preguntaba, ¿es posible unir el resultado de una consulta consigo mismo?Auto-unión de una subconsulta
(estoy usando PostgreSQL)
Me preguntaba, ¿es posible unir el resultado de una consulta consigo mismo?Auto-unión de una subconsulta
(estoy usando PostgreSQL)
puede hacerlo con CON:
WITH subquery AS(
SELECT * FROM TheTable
)
SELECT *
FROM subquery q1
JOIN subquery q2 on ...
O mediante la creación de una vista que contiene la consulta, y uniéndose en que:
SELECT *
FROM TheView v1
JOIN TheView v2 on ...
O el enfoque de fuerza bruta: escriba la subconsulta dos veces:
SELECT *
FROM (
SELECT * FROM TheTable
) sub1
LEFT JOIN (
SELECT * FROM TheTable
) sub2 ON ...
PostgreSQL no admite consultas WITH en la última versión, 8.3, según http://www.postgresql.org/docs/8.3/interactive/unsupported-features-sql-standard.html. – markusk
Si puede actualizar a 8.4, actualmente en versión beta, WITH está finalmente allí, consulte http://www.postgresql.org/docs/8.4/static/queries-with.html –
Como mi subconsulta es algo compleja, lo haré intente con una vista primero, luego la solución de "fuerza bruta" ... Eventualmente cambiaré a usar CON cuando se envíe pgsql 8.4 :) ¡Muchas gracias a todos! – Joril
¿Quiere decir, el resultado de una consulta en una tabla, a esa misma tabla. Si es así, entonces Sí, es posible ... p.
--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
Disculpa, acabo de ver tu comentario "Estoy usando PostGres". No estoy seguro de si lo anterior es sintácticamente correcto en postgres. –
Está bien AFAICS (excepto tal vez para el conflicto del caso 'foo' vs 'Foo' ;-). –
@Eoin: Bueno, quise unirme a los _resultados_ de las consultas, pero gracias por tu ayuda, de todos modos :) – Joril
Sí, sólo alias de las consultas:
SELECT *
FROM (
SELECT *
FROM table
) t1
JOIN (
SELECT *
FROM table
) t2
ON t1.column < t2.other_column
Podría dar un ejemplo de lo que estamos tratando de hacer? –