链接: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
答案 0 :(得分:0)
random()
返回一个介于0和1之间的随机双精度数字。
(random() * 10)::integer
是0到10之间的随机整数。
因此,循环将在INSERT
上执行1到11条co_books
语句之间的某个地方。
因此,每次运行代码时,表中的行数都会有所不同。