在多列搜索中获得独特的结果

时间:2012-07-06 16:25:38

标签: oracle plsql

我遇到的问题是在查询中正确限制我的搜索结果。我有一个用户表,其中包含用户名,密码,名字/姓氏等字段。此字段中的主键是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语句中的自定义列时使用它。有没有办法让我得到我想要的结果?

1 个答案:

答案 0 :(得分: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 (+);