У меня есть несколько таблиц:SQL Group LEFT JOIN результат
Пользователи
ID
Настройки
user_id
Я хочу, чтобы вернуть данные пользователя наряду со всеми настройками для данного пользователя, доступными в результате и er 'index', это возможно?
У меня есть несколько таблиц:SQL Group LEFT JOIN результат
Пользователи
ID
Настройки
user_id
Я хочу, чтобы вернуть данные пользователя наряду со всеми настройками для данного пользователя, доступными в результате и er 'index', это возможно?
Postgresql имеет ARRAY_AGG
функцию, которая делает конкатенацию для вас. например
SELECT Users.ID,
ARRAY_AGG(COALESCE(Name || ' : ' || Value, '')) AS Settings
FROM Users
LEFT JOIN Settings
ON Users.ID = Settings.User_ID
GROUP BY Users.ID
Ваша структура таблицы была немного расплывчато, так что выше, основан на схеме я создал на SQL Fiddle
Если у вас есть индекс в user_id колонке, вы могли бы сделать что-то вроде этого:
select u.*, s.*
from Users u
inner join Settings s on (u.id = s.user_id);
Следующий запрос должен делать то, что вы хотите, если я хорошо понял ...
SELECT Users.*, Settings.*
FROM Users
JOIN Settings ON Settings.user_id = Users.id
Попробуйте GROUP_CONCAT
Как в mysql?
SELECT u.id, GROUP_CONCAT(s.id)
FROM Users u
INNER JOIN Settings s ON u.id = s.user_id
GROUP BY u.id;
EDIT: версия
PostgreSQL:
SELECT u.id, STRING_AGG(s.id)
FROM Users AS u
INNER JOIN Settings AS s ON u.id = s.user_id
GROUP BY u.id;
PostgreSQL не имеет функции 'group_concat'. Эквивалентная функция PostgreSQL - 'string_agg' –
Это работает, но то, что я хочу сделать, это для каждого пользователя возвращает одну строку с их параметрами, сгруппированных под «настройками» в результате. –
Итак, у вас есть дополнительные настройки, связанные с одним пользователем? – aleroot