1

特定の場所にアクセスできるユーザーのリストを作成しようとしています。私の意見では、ユーザーがアクセスできる場所を記録するデータベースのテーブルは逆になっています。ユーザーがアクセスできない場所を一覧表示します。私はnot inいくつかの異なる方法を試しましたが、うまくいきませんでした。クエリは空の結果セットを返すだけです。私はここで私を助けるために何かを見つけようとしましたが、これは役に立ちませんでした...常に空白の結果画面が表示されます(何も返されません)。問題は、対応する場所USER_LOCATION_EXCLUSIONごとに複数のエントリがあることにあると思います。USER_IDこのテーブル構造は作成しませんでしたが、継承しました。

シナリオ

Tables                  Columns
====================================================
APP_USER                USER_ID, USER_NAME    
LOCATION                LOCATION_ID, LOCATION_NAME    
USER_LOCATION_EXCLUSION USER_ID, LOCATION_ID

APP_USERおよびLOCATIONテーブルは両方とも一意の ID を持っています。これらの ID は両方とも(ユーザーがアクセスできないUSER_LOCATION_EXCLUSIONリストの場所) で使用され、ユーザーのアクセスに応じてこのテーブルで何度も使用できます。があり、アクセスできるレポートを作成したいと思います。USER_NAMELOCATION_NAME

4

2 に答える 2

1

あなたが望んでいるように聞こえるのは、デカルトの結果であり、除外が少ないことです...つまり、各ユーザーに対して、すべての場所へのアクセスを許可すると仮定し、それらが除外されるものを見つけます...

select
      PreQuery.User_ID,
      PreQuery.User_Name,
      PreQuery.Location_Name
   from
      ( select
               AU.User_ID,
               AU.User_Name,
               L.Location_ID,
               L.Location_Name
            from
               App_User AU,
               Location L ) PreQuery
         LEFT JOIN USER_LOCATION_EXCLUSION ULE
             on PreQuery.User_ID = ULE.User_ID
             AND PreQuery.LOCATION_ID = ULE.LOCATION_ID
       where
          ULE.Location_ID = NULL

除外テーブルに LEFT JOIN を実行すると、すべてのレコードが除外リストに結合されます...したがって、一致が見つかった場合、その場所 ID は存在します...存在しない場合は、 null (NOT Excluded from を満たす)

これにより、すべてのユーザー/場所に対してテストされた副選択の WHERE 句も排除されます

于 2012-11-13T16:51:27.380 に答える
0

私はこのようなものを使用します。場所とユーザーのすべての組み合わせを取得するには、結合なしで Select クエリを使用できます。

Select *
From Location, App_User

ただし、ここから、テーブルに含まれる場所とユーザーの組み合わせを除外する必要がありuser_location_listます。これで問題を解決できます:

Select
  Location.*,
  App_User.*
From App_USer, Location
Where
  Not Exists (select * from user_location_exclusion
              where user_location_exclusion.user_id=app_user.user_id
              and user_location_exclusion.location_id=location.location_id)

これにより、除外されていないすべてのユーザーのすべての場所が表示されます。

于 2012-11-13T16:45:17.597 に答える