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