2013-01-05 49 views
3

我有一個表的連接:
如何使有條件的基於列的值

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

ActivityItemIdFollowId可以爲空(永遠都)。
現在我需要以某種方式根據或ActivityTypeId或如果ItemIdFollowId之一,如果空作出加入Items表或Followings表。
如何寫這種條件查詢?

如果ItemId爲空我需要加入Followings表。
如果ItemId不爲空,我需要加入Items表。
我也詢問了關於ActivityTypeId,因爲它可能更容易檢查活動類型,並根據它來加入項目或關注表。

+0

我不明白這一點:'現在我需要以某種方式基於或ActivityTypeId或如果其中一個ItemId或FollowId如果null以加入項目表或關注表。' – LittleBobbyTables

+0

我已更新問題。 – 1110

+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 
+0

第二個人做到了。謝謝 – 1110

+0

@ 110我的榮幸。 –

+0

@ 1110哪一個是優化方式? –