将来自不同 table 的最大 ID 添加到 PostgreSQL 中的查询
Adding max id from a different table to a query in PostgreSQL
我需要将 max(id) 与从一个 table 到另一个 table 的 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 对 a_really_big_table
中的每一行查找 mytable
?
我正在使用 PostgreSQL 9.4.1
有解决办法吗?
=# 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)
我需要将 max(id) 与从一个 table 到另一个 table 的 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 对 a_really_big_table
中的每一行查找 mytable
?
我正在使用 PostgreSQL 9.4.1
有解决办法吗?
=# 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)