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