2016-03-05 61 views
1

我被困在SQLite中做一个简单的连接。INNER JOIN子句在NATURAL JOIN中没有返回行

我有两个表 - 一个与数据,以及其他相关的一个具有指针:

  • 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 

任何想法?

我可以只使用NATURAL JOIN,但我想知道为什么正常连接不起作用。

此外,表References有一个愚蠢的名字,但它是什么。

+1

'“REL_References_Pages.ReferenceID”'应该是'“REL_References_Pages”“ReferenceID”' –

回答

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 
+0

非常感谢。我认为TableName.Column构造是单片的。在“参考文献”中添加qotes .ReferenceID固定所有。 感谢您的其他两条评论。我曾尝试过,但由于选择不正常,我感到困惑的是什么问题。 – mrmut

+0

我已经添加了对运行查询时实际发生的事情的解释。 –

+0

非常感谢。我花了几个小时试图找出答案。 – mrmut