0

私は次のように構築されたDBを持っています:非アクティブテーブル-すべての削除された\非アクティブユーザーを含むアクティブテーブル-すべての現在アクティブなユーザーを含むメインテーブル-すべてのユーザー(アクティブと非アクティブの両方)を含む

3つのテーブルすべて(userNameなど)にいくつかのフィールドが存在し、非アクティブまたはアクティブなテーブルからデータを取得したいので(データはすべてのテーブルで常に等しいとは限らないため)、結合したいActiveテーブルまたはInactiveテーブルのいずれかから取得されます(メインテーブルのActiveStateフィールドに応じて)

私のクエリは非常に複雑ですが、簡単にするために、私の問題を説明する小さな例があります。

SELECT M.ID,
       A.userName
FROM   MainTbl M

IF M.ActiveState = 'Active'
   THEN 
   INNER JOIN ActiveTbl A ON A.UserID = M.ID
ELSE
    INNER JOIN InactiveTbl A ON A.UserID = M.ID
END
    INNER JOIN SomeTbl S ON S.Field = A.Field

注: Aを使用した両方のテーブルの理由は、このテーブルを選択自体と、さらにいくつかの内部結合に使用するためです。

そうする方法はありますか?

ありがとう

4

2 に答える 2

0
SELECT CASE M.ActiveState
            WHEN 'Active' THEN A.userName
            ELSE I.userName
       END AS userName
FROM   MainTbl M
       LEFT JOIN ActiveTbl A
            ON  A.UserID = M.ID
       LEFT JOIN InactiveTbl I
            ON  I.UserID = M.ID
于 2013-01-16T09:43:56.327 に答える
0

INNER JOIN の代わりに LEFT JOIN を使用してから、次のようにします。

SELECT CASE WHEN A.ID IS NULL 
            THEN I.userName
            ELSE ActiveTbl.userName 
       END AS userName
FROM   MainTbl M
       LEFT JOIN ActiveTbl A 
                 ON A.UserID = M.ID 
                 AND m.ActiveState = 'Active'
       LEFT JOIN InactiveTbl I
                 ON I.UserID = M.ID
于 2013-01-16T09:38:02.630 に答える