链接: 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;
$$;
如果您点击链接,您可以清楚地看到 table person 列 pname 有 24 个唯一行。在我执行完代码块之后,然后测试 table: 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