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
的所有字段,并且根据推文是否有 owners
,AccessToken/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对应他tweets
table
也许 coalesce
对 select 第一个非空值有帮助:
select coalesce(o.AccessToken, t.AccessToken) as actualAccessToken [...]
我有 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
的所有字段,并且根据推文是否有 owners
,AccessToken/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对应他tweets
table
也许 coalesce
对 select 第一个非空值有帮助:
select coalesce(o.AccessToken, t.AccessToken) as actualAccessToken [...]