仅从左联接返回值(如果存在),否则从主表返回值

时间:2019-03-06 20:11:40

标签: tsql sql-server-2017

我有2张桌子

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表的所有者标识对应

1 个答案:

答案 0 :(得分:2)

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

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