表格中的单行有一个整数值大于> = 1的列,但必须选择该列多次。因此,如果列有'2',我希望select查询返回单行2次。
如何实现这一目标?
答案 0 :(得分:13)
不知道你为什么要做这样的事情,但是......
CREATE TABLE testy (a int,b text);
INSERT INTO testy VALUES (3,'test');
SELECT testy.*,generate_series(1,a) from testy; --returns 3 rows
答案 1 :(得分:3)
你可以创建一个只有数字的表格,如下所示:
CREATE TABLE numbers
(
num INT NOT NULL
, CONSTRAINT numbers_pk PRIMARY KEY (num)
);
并使用所需数量填充它,从一个开始:
INSERT INTO numbers VALUES(1);
INSERT INTO numbers VALUES(2);
INSERT INTO numbers VALUES(3);
...
然后,如果你有基于“repeat_count”列重复的表“mydata”,你会像这样查询:
SELECT mydata.*
FROM mydata
JOIN numbers
ON numbers.num <= mydata.repeat_count
WHERE ...
如果你当然需要预先知道最大重复次数,并让你的数字表达到那么高。
不知道你为什么要这么想。小心分享?
答案 2 :(得分:1)
您可以使用递归查询来执行此操作,请查看示例中的示例 the postgresql docs
类似
WITH RECURSIVE t(cnt, id, field2, field3) AS (
SELECT 1, id, field2, field3
FROM foo
UNION ALL
SELECT t.cnt+1, t.id, t.field2, t.field3
FROM t, foo f
WHERE t.id = f.id and t.cnt < f.repeat_cnt
)
SELECT id, field2, field3 FROM t;
答案 3 :(得分:0)
最简单的方法是进行简单选择,例如:
SELECT generate_series(1,{xTimes}), a.field1, a.field2 FROM my_table a;