多连接查询中如何返回无主键LEFT JOIN表的ROWID
如何在LEFT JOIN查询中获取TableB的ROWID
ROWID是多数数据库(比如SQLite、Oracle)中无主键表自带的隐式列,你需要通过表名.ROWID的方式明确指定要获取的是TableB的ROWID,同时注意关联条件的字段名拼写一致性。
正确的查询语句
SELECT TableA.PK AS ID, TableB.ROWID AS B_ROWID FROM TableA LEFT JOIN TableB ON TableB.StringValue = TableA.StringValue;
关键说明
- 必须用
TableB.ROWID限定ROWID所属的表,否则数据库无法识别你要调用哪个表的隐式ROWID列 - 给ROWID列起别名
B_ROWID可以让结果集更清晰,避免歧义 - 你的原查询中关联条件里的字段名写成了
StringValues(多了个s),但表结构定义的是StringValue,拼写错误会导致关联失败,最终所有TableB的ROWID都返回NULL,这很可能是你之前没得到正确结果的核心原因之一 - 由于是LEFT JOIN,当TableA的记录在TableB中没有匹配的
StringValue时,B_ROWID会返回NULL,这符合LEFT JOIN的逻辑
内容的提问来源于stack exchange,提问作者Mink
相关产品推荐
相关产品推荐

