簡體   English   中英

如何將這兩個表連接到同一個Sql結果中

[英]How can I join these two tables into the same Sql result

我正在嘗試生成一個SQL查詢,該查詢可以將兩個表連接在一起並返回結果..但第二個表已“展平”。 我不確定這是否是正確的技術術語。 它是非正規化的嗎?

無論如何,有人可以建議我該怎么做嗎?

表: 用戶

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
  • 用於展平第二張表的分隔符是SPACE。 如果別名有空格,對我來說很不幸。 (考慮一下,不良數據)。

我的問題的另一個示例是想一個StackOverflow問題+標簽。

http://groupconcat.codeplex.com/具有MySQL的GROUP_CONCAT()的克隆,實現為CLR聚合功能。 我想這不是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]

或類似。

尚未測試,請嘗試一下。 我這里沒有服務器。

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

這是SQL Fiddle輸出

在這種情況下, FOR XML PATH很方便:

SELECT UserID, Name 
    , LTRIM(RTRIM((SELECT ' ' + Alias 
        FROM UserAliases WHERE UserID = u.UserID 
        FOR XML PATH('')))) AS Aliases
FROM Users u

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM