1

我坚持在 SQLite 中做一个简单的连接。

我有两张表 - 一张带有数据,另一张带有指针:

  • References包含ReferenceIDReference
  • REL_References_Pages包含ReferenceIDPageID

正常的连接查询工作正常并返回良好的结果:

SELECT Reference
FROM "References" 
NATURAL JOIN REL_References_Pages
WHERE PageID = 6

但是,如果我尝试进行显式 JOIN,则结果没有错误,但不返回任何结果。它卡在 ON 子句上:

SELECT Reference
FROM "References" 
JOIN REL_References_Pages ON "REL_References_Pages.ReferenceID" = "References.ReferenceID"
WHERE PageID = 6

有任何想法吗?

我可以只使用自然连接,但我想知道为什么普通连接不起作用。

此外,该表References有一个愚蠢的名称,但它就是这样。

4

1 回答 1

2

我相信你得到空输出(没有行)的原因是因为在你的 on 子句中你试图比较两个不相等的字符串,因此返回false.

简单地说,下面的命令会产生一个false布尔输出:

SELECT "REL_References_Pages.ReferenceID" = "References.ReferenceID"

table.column尝试在不需要的整个构造周围不加引号。在您的情况下,只有References表最初封装在数据模型中。至少我是这么认为的。

SELECT Reference
FROM "References" 
JOIN REL_References_Pages
  ON REL_References_Pages.ReferenceID = "References".ReferenceID
WHERE PageID = 6

或者使用别名更好:

SELECT Reference
FROM "References" AS r 
JOIN REL_References_Pages AS rp
  ON r.ReferenceID = rp.ReferenceID
WHERE PageID = 6

您还可以通过应用USING表达式来缩短代码,因为您的列名在两个表中完全相同,并且您根本不需要以这种方式为查询中的表分配别名:

SELECT Reference
FROM "References"
JOIN REL_References_Pages USING ( ReferenceID )
WHERE PageID = 6
于 2016-03-05T09:42:53.817 回答