Return 来自左的值仅在存在时加入,否则来自主 table

Return values from left join only if it exists, otherwise from the main table

我有 2 table

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,
)

我想 return tweets 的所有字段,并且根据推文是否有 ownersAccessToken/TokenSecret 将来自 owner table, 如果不是那么它将来自 tweets table.

我很难找到 best/efficient 编写此查询的方法。

这是我目前所拥有的(只有 return 来自主要 table,如果有的话不是所有者)

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

我用的是SQLServer 2017,推文中table,ReferenceId是ownerid对应他tweetstable

也许 coalesce 对 select 第一个非空值有帮助:

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