Hi, The following is a reduced test-case of a problem I have observed:
CREATE TABLE a(tid,pid); CREATE TABLE b(tid,pname); CREATE TEMP TABLE pidmap(newpid INTEGER,oldpid INTEGER); CREATE TEMP TABLE pnamemap(pid INTEGER,pname TEXT COLLATE BINARY); (Please note that the tables are usually populated with data.) SELECT a.ROWID,b.ROWID FROM a INNER JOIN b ON a.tid=b.tid AND a.pid=(SELECT pid FROM pidmap WHERE pname=b.pname); The same problem occurs with a similar query: SELECT a.ROWID,b.ROWID FROM a INNER JOIN b ON a.tid=b.tid WHERE a.pid=(SELECT pid FROM pidmap WHERE pname=b.pname); The problem comes from an unintentional mistake: using the table pidmap in the sub-query, rather than pnamemap. Running the sub-query on its own gives (as expected): SELECT pid FROM pidmap; Error: no such column: pid This also results in an error: SELECT a.ROWID,b.ROWID FROM a INNER JOIN b ON a.tid=b.tid AND a.pid=(SELECT xyz FROM pidmap WHERE pname=b.pname); Error: no such column: xyz And, of course, correcting the original query works as expected: SELECT a.ROWID,b.ROWID FROM a INNER JOIN b ON a.tid=b.tid AND a.pid=(SELECT pid FROM pnamemap WHERE pname=b.pname); Seems to me that sqlite is resolving the column name from the incorrect scope in the sub-query? I have observed this in v3.7.10, but have also tested it in v3.8.8.3. Andy