を使用してここで正常に動作クエリです:SQLiteのは、「そのような列を:ROWID」と言うんサブクエリ
SELECT rowid as msg_rowid, a, b, c FROM messages m1
そしてここでも大丈夫です別の一つだ:
SELECT rowid as match_rowid FROM messages m2 WHERE x LIKE '%abc%'
しかし、私は置けば一緒に次のように、SQLiteは文句:No such column: rowid
:
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
は、誤解を招くようなエラーメッセージがどのように見えるかを与えます。
どうすればこの問題を解決できますか?
私が代わりにROWIDのmessages.timestampフィールドを使用している場合、クエリは正常に動作します:
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
これはバグ、またはrowid
の使用にすることにより、設計制約ですか?
サブクエリのROWIDをエイリアスしようとしますか? このように:m_rowidとしてのmatch_rowidからのメッセージm2 WHERE x LIKE '%abc%' – GuZzie
@GuZzie Whoa ... *サブクエリでのエイリアシングは助けになりませんが、エイリアシング*ちょうど外側のものとして'm1.rowid'は修正しました! –
素晴らしい!あなたが問題を修正したことを聞いてうれしく思います。 – GuZzie