SQLite 中嵌套内连接的问题

Posted

技术标签:

【中文标题】SQLite 中嵌套内连接的问题【英文标题】:problem with nested inner joins in SQLIte 【发布时间】:2011-10-27 15:05:51 【问题描述】:

下面的sql语句不会在SQLite中运行:

select * 
from A
left join (B inner join C on B.fkC = C.pk) on A.optionalfkB = B.pk

我得到一个 sqlException "未知列 B.pk"

根据@http://www.sqlite.org/lang_select.html 的文档,这应该可以工作,并且可以在所有其他 sql 实现中工作。我做错了吗?

【问题讨论】:

我有两个选择,但都不是很好的性能:使用嵌套的 sql 表达式,或者只是 B 和 C 之间的另一个左连接。我不喜欢使用左连接,除非我有虽然因为我发现他们需要更长的时间来执行 您能否发布表的架构(即使它们是示例)?这真的有助于回答这个问题。 您是否尝试使用这样的子查询? select * from A left join (SELECT * FROM B inner join C on B.fkC = C.pk) subQ on A.optionalfkB = subQ.pk 【参考方案1】:

它不起作用,因为“外部”查询不知道 B 是什么。

select * 
from A
left join (B inner join C on B.fkC = C.pk) B on A.optionalfkB = B.pk

没有select(B inner join C on B.fkC = C.pk) 很奇怪,但规范确实说它是有效的。

【讨论】:

你是个传奇!谢谢!我在任何地方都找不到解决方案,而您成功了。 @stitty 你问这个问题两年后还在这个问题上吗?哈哈,很高兴我能帮上忙!

以上是关于SQLite 中嵌套内连接的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“在范围内找不到连接”错误(SQLite)?

使用内连接 SQLITE 从两个表中删除行

sqlite3 内连接比较所有列

SQLite3中的内连接

外连接内的 SQL 内连接;嵌套改变结果

内连接嵌套在更新语句 SQL 中