4

我有一张桌子:

Activities{ActivityId, ActivityTypeId, CreatedByUserId, ItemId, FollowId}
Items{ItemId, Title}
Followings{FollowId, FollowerId, FollowingId}

Activity表中ItemIdFollowId可以为空(从不两者)。
现在我需要以某种方式基于或ActivityTypeId或如果其中之一ItemIdFollowId如果为空来连接到Items表或Followings表。
如何编写这种条件查询?

如果ItemId为空,我需要加入Followings表。
如果ItemId不为空,我需要加入Items表。
我还问了,ActivityTypeId因为检查活动类型可能更容易,并以此为基础加入 Items 或 Follows 表。

4

1 回答 1

4

以下每一项都将返回不同的结果。第一个将返回(活动和项目)和(活动和关注)之间的每个关系。第二个将返回(活动和项目)和(活动和关注)之间关系的每个组合。尝试它们,看看哪个最适合您。

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

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
于 2013-01-05T12:44:17.937 回答