Oracle Join View - 使用哪个rowid

时间:2010-07-16 13:42:13

标签: sql oracle join rowid

创建视图EVENT_LOCATION(“EVENT_ID”,“STREET”,“TOWN”)AS       SELECT A.EVENT_ID,A.STREET,A.TOWN       来自TBLEVENTLOCATION A.       加入TBLEVENTS B       ON A.EVENT_ID = B.EVENT_ID       在哪里B.REGION ='南';

如果我跑

SELECT ROWID, STREET, TOWN FROM EVENT_LOCATION 

然后我应该回到哪个ROWID?

我问的原因是: 在数据库中有许多具有上述“模式”的视图。似乎不同的是从不同的视图返回哪个rowid。即。我得到A.ROWID或B.ROWID ......

更新 我已使用以下视图解决了这个问题。这基本上保证了ROWID来自正确的表格。谢谢你的回复!

CREATE VIEW EVENT_LOCATION ("EVENT_ID", "STREET", "TOWN") AS
  SELECT A.EVENT_ID, A.STREET, A.TOWN
  FROM TBLEVENTLOCATION A
  WHERE A.EVENT_ID IN (SELECT EVENT_ID FROM TBLEVENTS WHERE REGION = 'South');

2 个答案:

答案 0 :(得分:1)

如果您使用的表中没有保存密钥,则获得ORA-01445,我认为它将返回其中一个密钥保留表的rowid。我不知道如果有几个表是密钥保存会发生什么。

答案 1 :(得分:1)

尝试查看

select * from user_updatable_columns where table_name = 'EVENT_LOCATION'

可更新的列应该表明Oracle所说的表(也就是rowid)。

请记住,如果您使用多表群集(不常见但可能),则同一群集中的不同表可以具有相同ROWID的记录。

就个人而言,我建议(a)不要在任何地方的代码中使用ROWID,(b)如果你这样做,那么在视图中包含一个明确的evt.rowid evt_rowid列。