如何解决postgresql是什么意思?
链接:https://www.2ndquadrant.com/wp-content/uploads/2019/05/sumtest.sql_.txt https://www.2ndquadrant.com/en/blog/join-lateral/
CREATE TABLE co_books (
dd numeric references books(dd),pname text references persons(pname),checked_out timestamptz,checked_in timestamptz);
Do $$
DECLARE
i int;
afew int;
p record;
BEGIN
FOR p IN SELECT pname FROM persons LOOP
afew := (random() * 10)::integer;
FOR i in 0..afew LOOP
INSERT INTO co_books (dd,pname,checked_out)
VALUES
( (SELECT dd FROM books ORDER BY random() LIMIT 1),p.pname,/* hint: fix bad random data here */
(SELECT xtime FROM X2018 ORDER BY random() LIMIT 1)
);
END LOOP;
END LOOP;
RETURN;
END;
$$;
如果单击链接,则可以清楚地看到表人pname列具有24个唯一行。 执行完代码块后,然后测试表co_books中有多少行。第一次是129行,然后我删除co_books,再次执行代码,该行是156行,第三次是154行。 因此,在这种情况下,我认为我听不懂以下部分。
FOR p IN SELECT pname FROM persons LOOP
afew := (random() * 10)::integer;
FOR i in 0..afew LOOP
解决方法
random()
返回一个介于0和1之间的随机双精度数字。
(random() * 10)::integer
是0到10之间的随机整数。
因此,循环将在INSERT
上执行1到11条co_books
语句之间的某个地方。
因此,每次运行代码时,表中的行数都会有所不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。