我有一张桌子:
Activities{ActivityId, ActivityTypeId, CreatedByUserId, ItemId, FollowId}
Items{ItemId, Title}
Followings{FollowId, FollowerId, FollowingId}
在Activity
表中ItemId
或FollowId
可以为空(从不同时)。
现在我需要以某种方式或ActivityTypeId
或ItemId
或FollowId
之一,如果为null,则加入Items
表或Followings
表。
如何编写这种条件查询?
如果ItemId
为空,我需要加入Followings
表
如果ItemId
不为null,我需要加入Items
表。
我还询问了ActivityTypeId
,因为检查活动类型可能更容易,并根据它来加入项目或关注表。
答案 0 :(得分: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
OR:
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