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 子句,因此您在两个表之间进行笛卡尔积。

试试这个外连接:

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 回答