【发布时间】:2013-09-04 15:32:41
【问题描述】:
我想知道使用 rowid 进行行匹配是否安全?
我有以下查询:
select * from a,
(select a.rowid rid, <some_columns_omitted> from a, b, c where a.some_column = b.some_column ... <joining_omitted>
union all
select a.rowid rid, <some_columns_omitted> from a, d, e where a.some_column = d.some_column ... <joining_omitted>
union all ....) sub_query
where a.rowid = sub_query.rid
使用rowid 进行行匹配会像使用主键一样安全吗?
【问题讨论】:
-
老实说,这是一个奇怪的问题。您还很可能返回重复项,因为您在子查询中进行了联合(子查询很可能有多行相同的 rowid)。联合或使用 IN 可以解决这个问题,但您是否尝试过根据需要将 a 加入其他表?
-
@tbone,我正在使用这样的查询,因为我需要来自其他表的数据,例如
d。由于子查询中的条件,没有重复项,它们不匹配重复项。我无法将联合移出子查询,因为在实际查询中我需要锁定数据,并且我使用了不适用于联合的for update子句