PostgreSQL: выберите одну строку x количество раз - PullRequest
3 голосов
/ 13 июня 2009

Одна строка в таблице имеет столбец с целочисленным значением> = 1 и должна выбираться, сколько бы раз ни говорилось в столбце. Поэтому, если в столбце указано «2», я бы хотел, чтобы запрос на выборку возвращал одну строку 2 раза.

Как это можно сделать?

Ответы [ 3 ]

13 голосов
/ 13 июня 2009

Не знаю, почему вы хотели бы сделать такую ​​вещь, но ...

CREATE TABLE testy (a int,b text);
INSERT INTO testy VALUES (3,'test');
SELECT testy.*,generate_series(1,a) from testy;  --returns 3 rows
3 голосов
/ 13 июня 2009

Вы можете создать таблицу, которая будет просто полна чисел, например:

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);
...

Тогда, если бы у вас была таблица "mydata", которую можно повторить на основе столбца "repeat_count", вы бы запросили ее так:

SELECT mydata.*
FROM mydata
JOIN numbers
ON numbers.num <= mydata.repeat_count
WHERE ...

Если, конечно, вам нужно заранее знать максимальное количество повторений, и ваша таблица чисел должна быть настолько высокой.

Не знаю, почему вы хотели бы сделать эту мысль. Хотите поделиться?

1 голос
/ 13 июня 2009

Вы можете сделать это с помощью рекурсивного запроса, посмотрите примеры в документация postgresql .

что-то вроде

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;
...