4

私はテーブルを持っています:

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

Activityテーブル内ItemIdまたはFollowIdnull にすることができます (両方にはなりません) 。今、テーブルまたはテーブルに結合するには、またはの場合または場合のいずれか
に基づいて何らかの形で必要があります。 この種の条件付きクエリを作成するにはどうすればよいですか? null の場合、テーブルに結合する必要があります。null でない 場合は、テーブルに結合する必要があります。 アクティビティの種類を確認し、それに基づいて Items または Follows テーブルに結合する方が簡単かもしれないので、 私も尋ねました。ActivityTypeIdItemIdFollowIdItemsFollowings


ItemIdFollowings
ItemIdItems
ActivityTypeId

4

1 に答える 1

4

以下のそれぞれは、異なる結果を返します。1 つ目は、(アクティビティとアイテム) と (アクティビティとフォロワー) の間のすべての関係を返します。2 つ目は、(活動とアイテム) と (活動とフォロー中) の間の関係のすべての組み合わせを返します。両方を試して、どちらが最適かを確認してください。

(注: 私はこれらをテストしていません - フリーハンドで書きました - 構文エラーがあるかもしれません)

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 に答える