PostgreSQL:选择单行x次

时间:2009-06-12 20:36:22

标签: sql postgresql select

表格中的单行有一个整数值大于> = 1的列,但必须选择该列多次。因此,如果列有'2',我希望select查询返回单行2次。

如何实现这一目标?

4 个答案:

答案 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;