Postgres存储过程问题 - 我该如何解决?

时间:2012-07-02 17:29:57

标签: postgresql stored-procedures

我正在创建一个如下所示的存储过程:

CREATE FUNCTION get_components(_given_user_id integer) RETURNS TABLE (id integer, name    varchar, active boolean, parent integer, type smallint, description varchar, email varchar, user_id integer, component_id integer, flag smallint) AS $body$
BEGIN
RETURN QUERY SELECT s.* FROM st_components s LEFT JOIN (SELECT a.* FROM st_users_components_perms a WHERE a.user_id=_given_user_id) ON a.component_id=s.id ORDER BY name;
END;
$body$ LANGUAGE plpgsql;

问题是,在a.component_id = s.id上ORDER BY名称不起作用,因为此时a.component_id超出了范围。有没有办法在查询之外声明“a”为st_users_components_perms?这是怎么解决的?非常感谢您的任何见解!

1 个答案:

答案 0 :(得分:0)

SELECT
    s.*
FROM
    st_components s
LEFT JOIN
    (SELECT
        a.*
    FROM
        st_users_components_perms a
  WHERE
      a.user_id = <CONSTANT>
    ) AS x
ON
    x.component_id = s.id
ORDER BY
    name;

虽然查询似乎毫无意义,但我们假设它是您真实查询的简化版本。