无法在sql查询中应用联接

无法在sql查询中应用联接,sql,oracle,outsystems,Sql,Oracle,Outsystems,我想添加join{User} 在以下查询中的{Deck}.[CreatedBy]={User}.[Id]上。我尝试了许多组合,但没有成功。我想从用户表中获取名称 SELECT @CampaignQueryFilterString AS [Selected], {Deck}.[Id], {Deck}.[Name], {User}.[Name], {Deck}.[TableOfContentId], {Deck}.[CreatedBy], {Deck}.[L

我想添加join{User} 在以下查询中的{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

看起来很简单,请使用您的符号尝试下面的查询。我在GROUPBY子句中添加了left join和in-{User}.[Name]。或者,您可以为{User}.[Name]-max、listagg使用一些聚合函数,并将其从GROUPBY子句中删除


您没有显示您的尝试,因此我们不知道是否有错误或意外结果。对于这种形式的问题,这是我所能帮助的。用户也是其中之一,最好避免将其用作别名、变量名等。

您将其标记为Oracle,但-据我所知,这不是Oracle…请删除Oracle标记,它看起来也不像MySQL。MS SQL Server使用[和@作为标识符,但不确定{@are动态输入参数。{}指的是表名,[]指的是列名这是outsystems构建costum查询的方法。@xxx是一个输入变量。{xxx}是表,[xxx]是列
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