当前位置: 首页 > 面试题库 >

SQLite自然联接坏了吗?

戚高洁
2023-03-14
问题内容

我只是逐渐了解NATURAL JOIN,而SQLite却表现不佳。

SELECT * FROM r1 NATURAL JOIN (r2 NATURAL JOIN r3);

SELECT * FROM (r1 NATURAL JOIN r2) NATURAL JOIN r3;

产生相同(正确)的结果。

但是,如果我省略括号,如下所示:

SELECT * FROM r1 NATURAL JOIN r2 NATURAL JOIN r3;

我看到r1和r2正确连接,但是r3根本没有连接到结果,而是形成了r1 NATURAL JOIN r2,r3的笛卡尔积。

第一个联接结果的属性名称是否存在问题,或者我误解了SQL?


问题答案:

我自己没有使用该数据库,但是根据此文档,SQLite中的所有联接均基于左右表的笛卡尔积。

NATURAL联接使用公共列名作为“键”来组合两个表。使用括号强制在处理外部联接之前构建“派生表”。如果没有括号,它将不会“看到”公共列名,因此第二个NATURAL关键字将被忽略。

一点建议:NATURAL JOIN如果您在代码中看到了它,但不要自己使用它,那么最好了解一下它是如何工作的机制。这是一个“危险的”构造,几乎没有价值。只是我的观点。



 类似资料:
  • 但是,postgres似乎没有运行。 并且无法与命令行客户端连接。 据我所知,我已经尝试了在讨论这个问题的其他Stackoverflow线程上建议的所有修复。具体地说: null

  • 我正试图将JasperReports的依赖项添加到我的项目中(尝试过SBT和Maven),但似乎有一个依赖项被破坏了。我使用的是来自maven repo的最新版本6.1.0(也测试了以前的版本和相同的版本)。 我还添加了Jasper存储库,因为itext库需要从那里抓取。 但我不断收到以下错误:[info]正在解决org.codehaus.castor#castor-xml;1.3.3...[wa

  • 问题内容: 我使用的Swift很少,但是来自Objective C,关于Swift的一些事情就是PITA。 在iOS编程中,我们有方法,它是UIView的一部分。 因此,我尝试使用Xcode的自动完成功能并开始输入: 自动完成显示: 然后,我进入“持续时间”字段,然后输入数字: 然后,我再次跳到动画块,然后按Enter键,就像我通常在Objective C中一样,Xcode现在显示: 因此,我最后

  • 问题内容: 我正在努力了解基本的MySQL连接。 基本上,我有2个表,其中一个包含客户的名字和地址ID,另一个具有实际地址。 我不仅要显示客户名称和地址ID,还希望它显示客户名称和实际地址。 我的基本选择语句是这样的: 它将显示如下内容: 而不是我想将addressId与另一个表中的实际地址连接起来 像这样: 有谁可以向我展示实现这一目标的最佳方法? 也有人可以推荐一个很好的联接教程吗? 问题答案

  • 问题内容: 据我所知,使用旧的JMM来实现懒惰单调的DCL(双重检查锁定)技巧被打破了,但是我坚信它已被新的JMM和volatile字段所修复… 但是,在这篇不错的文章中,这显然已经足够新,足以引用DCL中的新旧JMM和volatile字段,表明它仍然坏了… 我在这里到那里读到它是固定的,然后我发现了这一点……有人可以最后说它是否损坏了? 我的理解是,通过波动性地在关系发生之前保证发生的先兆并有效

  • 欢迎的xml文件: 不是我还尝试了和。 代码的结果是打开屏幕,然后按下按钮--什么都没有发生。