繁体   English   中英

无法在 sql 查询中应用连接

[英]Not able to apply join in sql query

我想在以下查询中添加连接“JOIN {User} ON {Deck}.[CreatedBy] = {User}.[Id]” 我尝试了很多组合但没有成功。 我想从用户表中获取名称

    SELECT  @CampaignQueryFilterString AS [Selected],
    {Deck}.[Id], {Deck}.[Name],
    {User}.[Name],
    {Deck}.[TableOfContentId], {Deck}.[CreatedBy],
    {Deck}.[LastModifiedOn], {Deck}.[ExpiryDate],s1.[Count]      
    FROM  {Deck}
    JOIN
    (
        SELECT {Deck}.[Id],
        LISTAGG( {TagValue}.[Id], ',' ) WITHIN GROUP (ORDER BY {TagValue}.[TagCategoryId] ) AS Tags
        FROM {Deck} 
        JOIN {AssociatedDeckTags}
        ON {AssociatedDeckTags}.[DeckId] = {Deck}.[Id]
        JOIN {TagValue}
        ON {AssociatedDeckTags}.[TagValueId] = {TagValue}.[Id]
        WHERE {Deck}.[IsPublished] = 1
                AND {Deck}.[IsActive] = 1 AND {Deck}.[ReplacedByDeckId] IS NULL
                AND {Deck}.[TableOfContentId] IN @TableOfContentIdFilterString
                AND {Deck}.[ContentFileTypeId] IN @AllowedContentType
                AND {Deck}.[ExpiryDate] > SYSDATE
        GROUP BY {Deck}.[Id]       
    ) DeckView
    ON {Deck}.[Id] = DeckView.Id  
    JOIN(
        SELECT COUNT(*) AS [Count], {DeckGroup}.[DeckId] AS [S1DeckId]
        FROM {DeckGroup}
        JOIN {Slide} ON {Slide}.[DeckGroupId] = {DeckGroup}.[Id]
        GROUP BY {DeckGroup}.[DeckId]
    ) s1 ON s1.[S1DeckId] = {Deck}.[Id]
    @RegexString
    @SearchFilter
    @CreatedBy
    GROUP BY 
    {Deck}.[Id], {Deck}.[Name], {Deck}.[TableOfContentId], 
    {Deck}.[CreatedOn], {Deck}.[CreatedBy],
    {Deck}.[LastModifiedOn], {Deck}.[ExpiryDate], 
    {Deck}.[NumOfPreviews], {Deck}.[NumOfDownloads],s1.[Count]        
    ORDER BY @Orderby

看起来只是加入,请尝试以下查询(使用您的符号)。 我添加了left joingroup by子句 - {User}.[Name] (可选)您可以为{User}.[Name] - max()listagg()使用一些聚合函数并将其从group by子句中删除。

SELECT @CampaignQueryFilterString AS [Selected],
       {Deck}.[Id], {Deck}.[Name], {User}.[Name], {Deck}.[TableOfContentId], 
       {Deck}.[CreatedBy], {Deck}.[LastModifiedOn], {Deck}.[ExpiryDate], s1.[Count]
  FROM {Deck}
  JOIN DeckView ON {Deck}.[Id] = DeckView.Id            -- subquery1 
  JOIN s1 ON s1.[S1DeckId] = {Deck}.[Id]                -- subquery2 
  LEFT JOIN {User} ON {Deck}.[CreatedBy] = {User}.[Id]  -- <-- add join here
  @RegexString
  @SearchFilter
  @CreatedBy
  GROUP BY 
    {Deck}.[Id], {Deck}.[Name], {User}.[Name],          -- <-- add column here 
    {Deck}.[TableOfContentId], {Deck}.[CreatedOn], 
    {Deck}.[CreatedBy], {Deck}.[LastModifiedOn], 
    {Deck}.[ExpiryDate], {Deck}.[NumOfPreviews], 
    {Deck}.[NumOfDownloads], s1.[Count]
  ORDER BY @Orderby

你没有展示你的尝试,所以我们不知道是否有错误或不想要的结果。 对于这种形式的问题,我只能提供帮助。 USER也是Oracle Reserved Words 之一,最好避免将其用作别名、变量名等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM