2012-07-06 43 views
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语句中的自定义列上工作。有什么方法可以获得我以后的结果?

回答

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

不幸的是,这不仅造成显示,被禁止用户。但是,通过将外部联接移动到Banned_users表中,一切工作都很完美,即向所有用户显示了禁止状态,所以我假设这是一个错字:)无论如何,非常感谢! – Harry 2012-07-06 16:41:33

+0

哎呀,是的。错字;) – Phil 2012-07-06 16:42:07