2016-03-05 113 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