Oracle 在多列搜索中获取唯一结果

Oracle 在多列搜索中获取唯一结果,oracle,plsql,Oracle,Plsql,在查询中正确限制结果时遇到问题。我有一个用户表,其中包含用户名、密码、名字/姓氏等字段。该字段中的主键是用户id。我还有一个被禁止用户表,其中也有一个主键是用户id。我的查询理想情况是显示所有用户数据,然后显示他们的“禁止状态”,根据其用户id是否显示在“禁止用户”表中。我目前对此的查询如下: select APEX_ITEM.CHECKBOX(1,gs_users.user_id) checkbox, "GS_USERS"."USERNAME" as "USERNAME", "GS_USE

在查询中正确限制结果时遇到问题。我有一个用户表,其中包含用户名、密码、名字/姓氏等字段。该字段中的主键是用户id。我还有一个被禁止用户表,其中也有一个主键是用户id。我的查询理想情况是显示所有用户数据,然后显示他们的“禁止状态”,根据其用户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语句中的custom列出现时如何处理。有什么方法可以得到我想要的结果吗?

没有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 (+);

不幸的是,这只会导致显示被禁止的用户。然而,通过将外部连接移动到Banked_users表,一切都完美地工作了,即,显示所有用户,而不考虑Band状态,因此我假设这是一个输入错误:)无论哪种方式,非常感谢!