Sql 如何基于列值进行条件联接

Sql 如何基于列值进行条件联接,sql,sql-server,tsql,stored-procedures,join,Sql,Sql Server,Tsql,Stored Procedures,Join,我有一张桌子: Activities{ActivityId, ActivityTypeId, CreatedByUserId, ItemId, FollowId} Items{ItemId, Title} Followings{FollowId, FollowerId, FollowingId} 在Activity表ItemId或FollowId中,可以为空(不能同时为空)。 现在,我需要以某种方式基于或activitypeid或者如果ItemId或FollowId中的一个为空,以加入项表或下

我有一张桌子:

Activities{ActivityId, ActivityTypeId, CreatedByUserId, ItemId, FollowId}
Items{ItemId, Title}
Followings{FollowId, FollowerId, FollowingId}
Activity
ItemId
FollowId
中,可以为空(不能同时为空)。
现在,我需要以某种方式基于或
activitypeid
或者如果
ItemId
FollowId
中的一个为空,以加入
表或
下表。

如何编写这种条件查询?

如果
ItemId
为空,我需要加入以下
表。
如果
ItemId
不为空,我需要加入
Items
表。

我还询问了有关ActivityTypeId的问题,因为检查activity type可能更容易,并基于此创建项目或下表的联接。

以下每一项都将返回不同的结果。第一个将返回(活动和项目)和(活动和后续活动)之间的所有关系。第二个将返回(活动和项目)和(活动和后续活动)之间的所有关系组合。两种方法都试一下,看看哪一种最适合你

(注意:我还没有测试这些-我是徒手写的-可能有语法错误)

或:


我不明白这一点:
现在我需要以某种方式基于或ActivityTypeId,或者如果ItemId或FollowId中的一个为null,以加入到Items表或FollowId表。
我有一个更新的问题。您想在结果集中看到什么(什么列)?所有来自Activity、Items和FollowId,我认为这更容易。在应用程序中,我可以根据类型读取不同的列。@1110哪一个是优化的方式?
SELECT  a.ActivityId, 
        a.ActivityTypeId,
        a.CreatedByUserId,
        i.ItemId,
        i.Title,
        null as FollowId,
        null as FollowerId,
        null as FollowingId
FROM    Activities a INNER JOIN Items i ON a.ItemId = i.ItemId
UNION ALL
SELECT  a.ActivityId, 
        a.ActivityTypeId,
        a.CreatedByUserId,
        null as ItemId,
        null as Title,
        f.FollowId,
        f.FollowerId,
        f.FollowingId
FROM    Activities a INNER JOIN Followings f ON a.FollowId = f.FollowId
SELECT  a.ActivityId, 
        a.ActivityTypeId,
        a.CreatedByUserId,
        i.ItemId,
        i.Title,
        f.FollowId,
        f.FollowerId,
        f.FollowingId
FROM    Activities a 
        LEFT OUTER JOIN Items i ON a.ItemId = i.ItemId
        LEFT OUTER JOIN Followings f ON a.FollowId = f.FollowId