为什么我在 postgres 中使用随机函数在 select 中得到几条记录?

Why do I get several records in select using random function in postgres?

这是我的查询:

SELECT id, geom from lars.punkt where id = (floor(random () * 99))::integer;

这是结果:

id    geom
40  "010100000000000000000010400000000000000000"
80  "010100000000000000000020400000000000000000"
88  "010100000000000000000020400000000000002040"

这是怎么回事?我也可以得到 2 行或零行。

我期待 1 行。

是数据库"slow"还是代码?

I am expecting 1 line.

每行调用随机函数,这就是为什么您有零个、一个或多个匹配项。 CROSS JOIN 可用于生成在 WHERE 条件下使用的单个随机值:

SELECT id, geom 
from lars.punkt 
CROSS JOIN(SELECT (floor(random () * 99)::integer)) s(c)  --generate single random value
where id = s.c;

db<>fiddle demo - run multiple times