Sql 子查询中的DB2 ROWID错误
运行以下查询时:Sql 子查询中的DB2 ROWID错误,sql,db2,Sql,Db2,运行以下查询时: SELECT T.ROWID FROM TABLE1 T WHERE NOT EXISTS (SELECT T.ROWID FROM TABLE2 T2 WHERE T2.C21= T.C11) AND EXISTS (SELECT 1 FROM TABLE3 F WHERE T.C11 = F.C31) SELECT T.ROWID FROM TABLE1 T WHERE NOT EXISTS (SELECT 1 FROM TABLE2 T2 WHERE T2.ROWID
SELECT T.ROWID FROM TABLE1 T WHERE NOT EXISTS (SELECT T.ROWID FROM TABLE2 T2 WHERE T2.C21= T.C11) AND EXISTS
(SELECT 1 FROM TABLE3 F WHERE T.C11 = F.C31)
SELECT T.ROWID FROM TABLE1 T WHERE NOT EXISTS (SELECT 1 FROM TABLE2 T2 WHERE T2.ROWID= T.ROWID) AND EXISTS
(SELECT 1 FROM TABLE3 F WHERE T.C11 = F.C31).
导致错误
SQL0206N "ROWID" is not valid in the context where it is used.
SQLSTATE=42703
当
很好。原因是什么?补救措施应该是什么
编辑:
我需要唯一标识表中的一行。该表没有任何键字段,不允许我编辑表数据。因此,我求助于使用ROWID。
关于可以通过联接完成的注释,我可能需要将ROWID与其他条件一起使用,作为以下查询:
SELECT T.ROWID FROM TABLE1 T WHERE NOT EXISTS (SELECT T.ROWID FROM TABLE2 T2 WHERE T2.C21= T.C11) AND EXISTS
(SELECT 1 FROM TABLE3 F WHERE T.C11 = F.C31)
SELECT T.ROWID FROM TABLE1 T WHERE NOT EXISTS (SELECT 1 FROM TABLE2 T2 WHERE T2.ROWID= T.ROWID) AND EXISTS
(SELECT 1 FROM TABLE3 F WHERE T.C11 = F.C31).
即使在这种情况下,我也无法使用ROWID进行比较。我说得对吗?是否从表2中选择了T.ROWID,其中T2.C21=T.C11执行?首先,两者应该是相同的。而且,您可能是指子查询中的t2.ROWID。@安德鲁:不,不是。但是只使用EXISTS子句是有效的。不,它不起作用-这可能是因为t别名没有在子查询中定义,只有T2…请阅读关于ROWID的文档。然后停止使用它。