0

我需要将 max(id) 与从一个表到另一个表的 bigint (和一个主键)连接起来。所以,如果最大 id 是 1234567890,那么我希望结果是:

name, max_id
'foo', 1234567890
'bar', 1234567890
'noo', 1234567890
'boo', 1234567890
'zoo', 1234567890

我的第一个想法就是编写一个函数并将其营销为STABLE

CREATE OR REPLACE FUNCTION get_max_id() RETURNS bigint AS
$$
DECLARE
    result bigint;
BEGIN
    RAISE NOTICE 'entering get_max_id';
    SELECT INTO result max(id) FROM mytable;
    RETURN result;
END;
$$
LANGUAGE plpgsql STABLE;

然后我通过如下 SQL 语句调用它:

SELECT name, get_max_id() FROM a_really_big_table;

但是,从我raise notice看来,这似乎是为a_really_big_table.

编写此代码的最佳方法是什么,以便我可以防止 PostgreSQL 对mytable中的每一行进行查找a_really_big_table

我正在使用 PostgreSQL 9.4.1

4

1 回答 1

0

它可以成为一个解决方案吗?

=# SELECT name AS name,
          (SELECT MAX(id) FROM your_table) AS max_id
   FROM really_big_table;

       name       │ max_id
──────────────────┼─────────
 44e5f8fc1f75fad2 │ 5307021
 97fc0aa3a5e3da98 │ 5307021
 ccb83afb938ad758 │ 5307021
 523bf25914e5c9c0 │ 5307021
 d2362badeb2eb7ea │ 5307021
 b6e0b87df6d41523 │ 5307021
 da754db1fa226453 │ 5307021
 865d0e177cb0a3e8 │ 5307021
 5904a07a273d8cba │ 5307021
 952c75ef37d47dab │ 5307021
(10 rows)
于 2015-02-21T04:14:07.307 回答