2012-05-23 216 views
1

我有幾個表:SQL集團LEFT JOIN結果

用戶

ID

設置

USER_ID

我想回到用戶詳細信息以及在結果中可訪問的給定用戶的所有設置呃'設置'索引,這可能嗎?

回答

3

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

1

假設你在user_id列一個指標,你可以做這樣的事情:

select u.*, s.* 
from Users u 
inner join Settings s on (u.id = s.user_id); 
1

下面的查詢應該做你想要什麼,如果我很好的理解...

SELECT Users.*, Settings.* 
FROM Users 
JOIN Settings ON Settings.user_id = Users.id 
+0

這工作,但我想要做的是爲每個用戶返回單行其設置分組創建的模式在結果中的'設置'下。 –

+0

那麼,你有更多與一個用戶相關的設置嗎? – aleroot

1

嘗試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; 

編輯:

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; 
+2

PostgreSQL沒有'group_concat'功能。等價的PostgreSQL函數是'string_agg' –