【问题标题】:Return values from left join only if it exists, otherwise from the main table仅当左连接存在时才从左连接返回值,否则从主表返回
【发布时间】:2019-03-06 20:11:39
【问题描述】:

我有两张桌子

CREATE TABLE [dbo].[Owners]
(
    [OwnerId] [int] NOT NULL,
    [AccessToken] [nvarchar](50) NULL,
    [TokenSecret] [nvarchar](50) NULL
)

CREATE TABLE [dbo].[Tweets]
(
    [TweetId] [int] IDENTITY(1,1) NOT NULL, 
    [ReferenceId] [int] NULL,
    [TweetContent] [nvarchar](max) NULL,
    [ReferenceType] [int] NOT NULL,
    [AccessToken] [nvarchar](50) NULL,
    [TokenSecret] [nvarchar](50) NULL,
)

我想返回tweets 的所有字段,根据推文是否有ownersAccessToken/TokenSecret 将来自owner 表,否则它将来自tweets 表。

我很难找出编写此查询的最佳/有效方式。

这是我目前所拥有的(仅从主表返回,如果有则不是所有者)

SELECT *  
FROM Tweets t
LEFT JOIN Owners o ON t.ReferenceId = o.OwnerId
WHERE t.ReferenceType = 1

我用的是SQL Server 2017,在tweet表中,ReferenceId是他tweets表的ownerid对应

【问题讨论】:

    标签: tsql sql-server-2017


    【解决方案1】:

    也许coalesce 会有助于选择第一个非空值:

    select coalesce(o.AccessToken, t.AccessToken) as actualAccessToken [...]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多