我正在尝试生成一个SQL查询,它可以将两个表连接在一起并返回结果..但第二个表是'flattened'。我不确定这是否是正确的技术术语。它是非规范化的吗?
无论如何,有人可以建议我怎么做吗?
表:用户
UserId Name
1 Pure.Krome
2 John
3 Jill
4 Jane
表: UserAliases
UserAliasId UserId Alias
1 1 Idiot
2 1 PewPew
3 3 BlahBlahBlah
期望的结果
UserId Name Aliases
1 Pure.Krome Idiot PewPew
2 John
3 Jill BlahBlahBlah
4 Jane
请注意:
outer join
)我的问题的另一个例子是想到StackOverflow问题+标签。
答案 0 :(得分:4)
http://groupconcat.codeplex.com/有一个实现为CLR聚合函数的MySQL GROUP_CONCAT()
的克隆。我猜SQL不是问题,但我也可以这样:
SELECT
[Users].[UserId] AS UserId,
[Users].[Name] AS Name,
GROUP_CONCAT_D([UserAliases].[Alias]," ") AS Aliases
FROM [Users]
OUTER JOIN [UserAliases] ON [Users].[UserId]=[UserAliases].[UserId]
或类似。
答案 1 :(得分:2)
这未经过测试,但试一试。我这里没有服务器。
SELECT a.UserID,
a.[Name],
coalesce(NewTable.NameValues, '') Aliases
FROM Users a LEFT JOIN
(
SELECT UserID,
STUFF((
SELECT ' ' + [Name]
FROM UserAliases
WHERE ( UserID = Results.UserID )
FOR XML PATH('')), 1, 2, '') AS NameValues
FROM UserAliases Results
GROUP BY UserID
) NewTable
on a.UserID = NewTable.UserID
<强> Here's SQL Fiddle Output 强>
答案 2 :(得分:1)
FOR XML PATH
很方便:
SELECT UserID, Name
, LTRIM(RTRIM((SELECT ' ' + Alias
FROM UserAliases WHERE UserID = u.UserID
FOR XML PATH('')))) AS Aliases
FROM Users u