SQL查询返回已删除的行

时间:2016-06-28 12:43:41

标签: mysql sql hibernate oracle-sqldeveloper

我目前在我的数据库中有以下表格,其中包含所述数据:

SUPPORT_USER_ROLES表:

USER_ID  |   ROLE_ID
1        |   1
1        |   2
2        |   2
*2*      |   *1*

最后一行(以'*'表示)已删除,在SQL Developer中没有任何迹象。

我现在正在运行以下查询:

SELECT su.USER_ID
     , su.USERNAME
     , sur.ROLE_ID
     , sr.ROLE_NAME 
  FROM support_users su
     , support_users_roles sur
     , support_roles sr 
 WHERE su.USER_ID = sur.USER_ID 
   AND su.IS_ACTIVE != ‘N’ 
   AND sr.ROLE_ID = sur.ROLE_ID 
   AND sr.IS_ACTIVE != ‘N’

并返回以下内容:

{  (USER_ID : 1, ROLE_ID : 1),  
   (USER_ID : 1, ROLE_ID : 2), 
   (USER_ID : 2, ROLE_ID : 1),  
   (USER_ID : 2, ROLE_ID : 2)  }

正如你所看到的,它仍在给我:

(USER_ID : 2, ROLE_ID : 1) 

即使它不再存在于任何地方。

我使用的是Java,JSF,PrimeFaces,SQL Developer,Hibernate,Weblogic和Eclipse IDE。我不确定我是否在这里大量遗漏了某些东西,需要刷新/更新某些地方。

我以前没有这个,所以我现在非常困惑:S

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

在知道问题后将评论作为答案

请确保使用与运行commit语句的程序相同的连接中的delete。从应用程序中删除并在SQL Developer上提交将不起作用。

现在你可以做两件事之一

(1)更改您的代码并运行commit一次,然后确保在每commit后使用DML statement

(2)同时使用deletecommit。如果数据已经deleted,则不会再次删除,之后会发生commit。如果未删除,则将删除并提交。

答案 1 :(得分:0)

James,如果该行在SQL开发人员中删除但未提交,则可能显示在SQL开发人员界面中不存在,但实际上仍然存在于表中,直到显式提交删除命令。

这可以通过单击SQL Developer中的提交图标或只是执行以下命令来实现: -

select
   a.a1,
   b_1.b_rid,
   b_1.b1,
   b_1.b2,
   b_2.b_rid,
   b_2.b1,
   b_2.b2      
from
   a     
left join a_xref_b as xf1 on a.a_rid = xf1.a_rid      
   and xf1.xref_type = 1     
left join b as b_1 on xf1.b_rid = b_1.b_rid       
left join a_xref_b xf2 on a.a_rid = xf2.a_rid      
   and xf2.xref_type = 2
left join b as b_2 on xf2.b_rid = b_2.b_rid 
相关问题