将不同表中的max id添加到PostgreSQL中的查询中

时间:2015-02-21 00:21:58

标签: postgresql postgresql-9.4

我需要加入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

1 个答案:

答案 0 :(得分: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)