1

これが私の問題です。顧客がCustomerRegionsテーブルで定義されたいくつかのリージョンにアクセスできると仮定します。

CustomerRegionID | CustomerID | RegionID
----------------------------------------
               1 |          1 |        1
               2 |          1 |        2

顧客1には3人のユーザー1、2、および3がいると想定します。ユーザーごとに、テーブルUserRegionsを介してアクセスできるCustomerRegionsを指定できます。

UserRegionID | UserID | CustomerRegionID
----------------------------------------
           1 |      1 |                1
           2 |      1 |                2
           3 |      2 |                2  

したがって、ユーザー1はCustomerregionsの両方にアクセスでき、ユーザー2はCustomerRegion2にのみアクセスできます。

特定のユーザーにUserRegionsが指定されている場合、それらのCustomerRegionsのみが結果セットに含まれますが、特定のユーザーにUserRegionsが指定されていない場合、すべてのCustomerRegionsが結果に含まれます。特定の顧客のユーザーごとにすべてのアクセス可能なリージョンを取得したいと思います。私が探している結果は次のようなものです。

CustomerID | UserID | RegionID
------------------------------
         1 |      1 |        1
         1 |      1 |        2
         1 |      2 |        2
         1 |      3 |        1
         1 |      3 |        2

私の質問は、これを単一のクエリで実行できるのか、そしてどのように実行できるのかということです。

編集:私は今それが機能しているようです:

SELECT CustomerID, 
    UserID, 
    RegionID
FROM users 
LEFT JOIN customerregions ON customerregions.CustomerID = users.CustomerID 
LEFT JOIN userregions ON userregions.UserID = users.UserID AND userregions.CustomerRegionID = customerregions.CustomerRegionID 
LEFT JOIN regions ON regions.RegionID = customerregions.RegionID 
WHERE (userregions.UserID IS NOT NULL 
    OR (SELECT COUNT(1) FROM userregions WHERE userregions.UserID = users.UserID) = 0)
    AND CustomerID = 1

whereの追加カウントクエリがうまくいくようです。@PabloMartinezにご協力いただきありがとうございます。しかし、誰かがこれを行うためのより良い方法を知っているなら、私に知らせてください。

4

1 に答える 1

0

私は@diEchoに同意します、テーブル構造は非常に混乱しています

参加しようとしましたか?

Select CustomerID, UserID, RegionID 
    from UserRegions join CustomerRegion 
         on  CustomerRegion.CustomerRegionID=UserRegions.CustomerRegionID  
    where customerID=1
于 2012-07-03T11:29:23.287 に答える