@kr_ilya

Как получить все данные из строки в данном запросе?

Есть запрос
WITH RECURSIVE
		r AS (
		    SELECT array[]::bigint[] AS res,min(id) AS min, max(id)-min(id) AS range FROM items
		  UNION ALL
		    SELECT res||ARRAY(SELECT id FROM items WHERE id IN (SELECT (min+range*random())::int FROM generate_series(1,${custom.numRows})) AND NOT id=ANY(res)), min, range
		    FROM r
		    WHERE
		      coalesce(array_length(res,1),0)<${custom.numRows}
		)
		SELECT * FROM (
		  SELECT res FROM r ORDER BY array_length(res,1) DESC NULLS LAST LIMIT 1
		) AS t LIMIT ${custom.numRows};


custom.numRows = 1 - Количество строк.

В результате я получаю значения id в массиве. В зависимости от количества строк их может быть несколько.
{ res: [ '4146' ] }

Как мне получать не просто значения id, а все данные строки?

Пробовал
WITH RECURSIVE
		r AS (
		    SELECT array[]::bigint[] AS res,min(id) AS min, max(id)-min(id) AS range FROM items
		  UNION ALL
		    SELECT res||ARRAY(SELECT id FROM items WHERE id IN (SELECT (min+range*random())::int FROM generate_series(1,${custom.numRows})) AND NOT id=ANY(res)), min, range
		    FROM r
		    WHERE
		      coalesce(array_length(res,1),0)<${custom.numRows}
		)
		SELECT * FROM items WHERE id IN (
		  SELECT res FROM r ORDER BY array_length(res,1) DESC NULLS LAST LIMIT 1
		) LIMIT ${custom.numRows}


В ответ получаю ошибку
error: operator does not exist: bigint = bigint[].

Еще вопрос:
Как добавить условие для выборки?
Например в таблице items есть столбец cost. Как указать чтобы его значение было > 1000?
  • Вопрос задан
  • 26 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы