INNER JOIN 子句不返回行,而 NATURAL JOIN 返回行
INNER JOIN clause returning no rows while NATURAL JOIN does
我坚持在 SQLite 中进行简单的连接。
我有两个 tables - 一个有数据,另一个有指针:
References
包含 ReferenceID
和 Reference
REL_References_Pages
包含 ReferenceID
和 PageID
正常的连接查询工作正常,returns 好的结果:
SELECT Reference
FROM "References"
NATURAL JOIN REL_References_Pages
WHERE PageID = 6
但是如果我尝试进行显式 JOIN,结果没有错误,但是 returns 没有结果。它卡在 ON 子句上:
SELECT Reference
FROM "References"
JOIN REL_References_Pages ON "REL_References_Pages.ReferenceID" = "References.ReferenceID"
WHERE PageID = 6
有什么想法吗?
我可以只使用 NATURAL JOIN,但我想知道为什么普通连接不起作用。
此外,tableReferences
虽然名字很蠢,但确实如此。
我相信你得到空输出(没有行)的原因是因为在你的 on 子句中你试图比较两个不相等的字符串并因此返回 false
.
简单地说,下面的命令会产生一个 false
布尔值输出:
SELECT "REL_References_Pages.ReferenceID" = "References.ReferenceID"
尝试在整个 table.column
结构中不需要的地方不加引号。在您的情况下,只有 References
table 最初封装在数据模型中。至少我是这么认为的。
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
表达式来缩短代码,因为您的列名在两个 table 中完全相同,并且您不需要为 [=29 分配别名=]s 在你的查询中完全是这样的:
SELECT Reference
FROM "References"
JOIN REL_References_Pages USING ( ReferenceID )
WHERE PageID = 6
我坚持在 SQLite 中进行简单的连接。
我有两个 tables - 一个有数据,另一个有指针:
References
包含ReferenceID
和Reference
REL_References_Pages
包含ReferenceID
和PageID
正常的连接查询工作正常,returns 好的结果:
SELECT Reference
FROM "References"
NATURAL JOIN REL_References_Pages
WHERE PageID = 6
但是如果我尝试进行显式 JOIN,结果没有错误,但是 returns 没有结果。它卡在 ON 子句上:
SELECT Reference
FROM "References"
JOIN REL_References_Pages ON "REL_References_Pages.ReferenceID" = "References.ReferenceID"
WHERE PageID = 6
有什么想法吗?
我可以只使用 NATURAL JOIN,但我想知道为什么普通连接不起作用。
此外,tableReferences
虽然名字很蠢,但确实如此。
我相信你得到空输出(没有行)的原因是因为在你的 on 子句中你试图比较两个不相等的字符串并因此返回 false
.
简单地说,下面的命令会产生一个 false
布尔值输出:
SELECT "REL_References_Pages.ReferenceID" = "References.ReferenceID"
尝试在整个 table.column
结构中不需要的地方不加引号。在您的情况下,只有 References
table 最初封装在数据模型中。至少我是这么认为的。
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
表达式来缩短代码,因为您的列名在两个 table 中完全相同,并且您不需要为 [=29 分配别名=]s 在你的查询中完全是这样的:
SELECT Reference
FROM "References"
JOIN REL_References_Pages USING ( ReferenceID )
WHERE PageID = 6