github sqlite3语法github.com/antlr/grammars-v4/blob/master/sqlite/sqlite.g4存在左连接问题.
对于这个sql
select * from t1 left join t2 on t1.owner = t2.email
“left”这个词被解析为table_alias.事情从那里迅速走下坡路
我想我可以通过某种方式说明table_alias是除了K_LEFT,K_RIGHT,K_INNER之外的任何名称但我不知道如何在语法中表达它
UPDATE.只是为了澄清sqlite的行为. (不是谈论antlr,谈论sqlite理解的内容)
这个
select username from user left join device on device.owner = user.id limit 2
作品.
这个
select username from user alias join device on device.owner = user.id limit 2
没有说列user.id不存在.
显然,“左”这个词被识别为关键字而不是表别名.
select username from user alias join device on device.owner = alias.id limit 2
工作,并进行内部联接
select username from user alias left join device on device.owner = user.id limit 2
工作并做左连接
@Mike Lischke的进一步更新
select username from user left where device.owner = left.id limit 2