我有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
的所有字段,根据推文是否有owners
,AccessToken/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
表的所有者标识对应
答案 0 :(得分:2)
也许coalesce
将有助于选择第一个非空值:
select coalesce(o.AccessToken, t.AccessToken) as actualAccessToken [...]