0

クエリで結果を適切に制限する際に問題が発生しています。ユーザー名、パスワード、名/姓などのフィールドを持つユーザーのテーブルがあります。このフィールドの主キーは user_id です。禁止されたユーザーのテーブルもあり、これも主キーが user_id です。私のクエリは、理想的にはすべてのユーザー データを表示し、「禁止されたユーザー」テーブルに user_id が表示されるかどうかに基づいて、「禁止ステータス」を表示します。このために現在用意しているクエリは次のとおりです。

select APEX_ITEM.CHECKBOX(1,gs_users.user_id) checkbox,
 "GS_USERS"."USERNAME" as "USERNAME",
 "GS_USERS"."FIRST_NAME" as "FIRST_NAME",
 "GS_USERS"."LAST_NAME" as "LAST_NAME",
 "GS_USERS"."ADMIN_FLAG" as "ADMIN",
 "GS_USERS"."EMAIL" as "EMAIL",
    CASE
      WHEN "GS_USERS"."USER_ID" = "GS_BANNED_USERS"."USER_ID" then 'Banned'
       else 'Unbanned'
    END status
from     
 "GS_USERS" "GS_USERS",
     "GS_BANNED_USERS" "GS_BANNED_USERS"

残念ながら、これにより多数の重複値が発生します。過去の状況では、ROWID を使用して独自の結果を得ることができましたが、case ステートメントでカスタム列を使用するときにこれをどのように機能させるかがわかりません。私が求めている結果を得る方法はありますか?

4

1 に答える 1

1

WHERE句がないため、2つのテーブル間でデカルト積を実行しています。

この外部結合を試してください:

select APEX_ITEM.CHECKBOX(1,gs_users.user_id) checkbox,
 "GS_USERS"."USERNAME" as "USERNAME",
 "GS_USERS"."FIRST_NAME" as "FIRST_NAME",
 "GS_USERS"."LAST_NAME" as "LAST_NAME",
 "GS_USERS"."ADMIN_FLAG" as "ADMIN",
 "GS_USERS"."EMAIL" as "EMAIL", 
 DECODE("GS_BANNED_USERS"."USER_ID",NULL,'Unbanned','Banned') as status
from     
 "GS_USERS" "GS_USERS",
     "GS_BANNED_USERS" "GS_BANNED_USERS"
where GS_USERS.USER_ID = GS_BANNED_USERS.USER_ID (+);
于 2012-07-06T16:31:29.693 に答える