SQLite在使用子查询时说"没有这样的列:rowid"

Rom*_*kov 3 sqlite

这是一个工作正常的查询:

SELECT rowid as msg_rowid, a, b, c FROM messages m1
Run Code Online (Sandbox Code Playgroud)

这是另一个也很好的:

SELECT rowid as match_rowid FROM messages m2 WHERE x LIKE '%abc%'
Run Code Online (Sandbox Code Playgroud)

但如果我把它们放在一起如下,SQLite抱怨:

SELECT rowid as msg_rowid, a, b, c FROM messages m1
JOIN
    (SELECT rowid as match_rowid FROM messages m2 WHERE x LIKE '%abc%')
ON
    msg_rowid >= match_rowid - 10 AND msg_rowid <= match_rowid + 5
Run Code Online (Sandbox Code Playgroud)

给出看起来像误导性错误消息:No such column: rowid.

我怎样才能解决这个问题?

如果我使用messages.timestamp字段而不是rowid,则查询运行正常:

SELECT timestamp as msg_ts, a, b, c FROM messages m1
JOIN
    (SELECT timestamp as match_ts FROM messages m2 WHERE x LIKE '%abc%')
ON
    msg_ts >= match_ts - 10 AND msg_ts <= match_ts + 5
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是对使用的设计限制rowid

Rom*_*kov 8

由Guzzie在评论中回答.出于某种原因,SQLite要求我明确外部rowid:

SELECT m1.rowid as msg_rowid, a, b, c FROM messages m1
       ^^ HERE
JOIN
    (SELECT rowid as match_rowid FROM messages m2 WHERE x LIKE '%abc%')
ON
    msg_rowid >= match_rowid - 10 AND msg_rowid <= match_rowid + 5
Run Code Online (Sandbox Code Playgroud)

  • "出于某种原因" - 请参阅上面的评论,http://stackoverflow.com/questions/8682398/sqlite-says-no-such-column-rowid-when-using-sub-queries#comment68721434_8682398 (3认同)