-1

私は専門家のクエリライターではありません。これに頭をかいて。誰かがこれを手伝ってくれる?

テーブルtbF

 RecordId      MarketId

    101            1  
    102            1
    201            2
    301            3

テーブルtbSB

   MarketId          BMId

    1            3
    1            5
    2            1       
    2            2
    2            3
    2            4
    2            5
    3            1

テーブルtbFM

RecordId    BMId

101            3
102            3
102            5
201            1
201            3
201            4

今、私は次のように出力したい

   Record Id   MarketId BMId     Active 
     101        1       3          true
     101        1       5          false
     102        1       3          true
     102        1       5          true
     201        2       1          true
     201        2       2          false
     201        2       3          true
     201        2       4          true
     201        2       5          false
     301        3       1          false          

アクティブな列->

存在するレコードIDが特定のBMIdにマップされている場合、そのtrueまたはfalseのRecordIdはマーケットに属します。->テーブルtbF
各マーケットには特定のBMIdがマッピングされていません->tbSB各レコードIDには特定のBMIdがマッピングされていません->tbFM

BMidがtbFMに存在する場合、各レコードについてアクティブはtrueです。それ以外の場合、BMIdがレコードではなくレコード市場にマップされている場合、そのレコードのアクティブはfalseです。

4

1 に答える 1

1
SELECT
  f.RecordId
  , f.MId
  , s.BMId
  , Active = CASE 
    WHEN m.RecordID is null THEN 'false'
    ELSE 'true'
    END
FROM tbF f
INNER JOIN tbSB s ON f.MId = S.MId
LEFT JOIN tbFM m ON m.RecordId = f.RecordID AND m.BMId = s.BMId

質問に示されている期待される出力がそのロジックと一致するため、アクティブをtbFMテーブル内の存在によって決定するようにしました。

于 2012-12-21T09:48:38.450 に答える