Запрос PostgreSQL для возврата результатов в виде списка, разделенного запятыми
Скажем, у вас есть запрос SELECT id from table (реальный случай - это сложный запрос), который возвращает вам несколько результатов.
Проблема заключается в том, как вернуть все id в одну строку, разделенные запятой?
Ответ 1
SELECT string_agg(id, ',') FROM table
Требуется PostgreSQL 9.0, но это не проблема.
Ответ 2
Вы можете использовать функции array() и array_to_string(), связанные с вашим запросом.
С помощью SELECT array( SELECT id FROM table ); вы получите результат, например: {1,2,3,4,5,6}
Затем, если вы хотите удалить знаки {}, вы можете просто использовать функцию array_to_string() и использовать запятую как разделитель, поэтому: SELECT array_to_string( array( SELECT id FROM table ), ',' ) получит результат вроде: 1,2,3,4,5, 6
Ответ 3
Вы можете сгенерировать CSV из любого SQL-запроса с помощью psql:
$ psql
> \o myfile.csv
> \f ','
> \a
> SELECT col1 AS column1, col2 AS column2 ... FROM ...
В результате myfile.csv будет иметь имена столбцов набора результатов SQL как заголовки столбцов CSV, а кортежи запросов - как строки CSV.