2012-08-06 22 views
0

我有在舉辦一個SQLite文件2個表如下:SQLite的:在左極限JOIN

  • TNODE其中包含一個節點名稱
  • tItem其中包含名稱,優先,以及對其父節點的引用。一個節點可以有多個項目。

要列出節點和他們的項目,我只是做一個簡單的連接查詢:

SELECT tNode.node, ..., tItem.itemName, tItem.itemPriority, ... 
FROM tNode 
LEFT JOIN tItem ON tItem.node=tNode.node 
ORDER BY tNode.node 

但現在我想的節點,包括該項目無論其優先級列表(無列表中的任何重複節點)。我以爲我可以使用以下查詢:

SELECT tNode.node, ..., tItem2.itemName, tItem2.itemPriority, ... 
FROM tNode 
LEFT JOIN 
    (SELECT itemName,itemPriority FROM tItem WHERE tItem.node=tNode.node LIMIT 1) 
AS tItem2 ON tItem2.node=tNode.node 
ORDER BY tNode.node 

但這不起作用(「沒有這樣的列:tNode.node」)。看來我不能在子查詢中使用tNode.node列。

如何在不必爲每列創建一個子查詢的情況下實現這一目標?除去其中的子查詢子句,也限制了通過與分鐘,然後加入羣后

回答

1

嘗試

SELECT tNode.node, ..., tItem2.itemName, tItem2.itemPriority 
FROM tNode 
LEFT JOIN 
    (SELECT itemName,min(itemPriority) as min_priority FROM tItem GROUP BY tItem.node) 
AS tItem2 ON tItem2.node=tNode.node 
ORDER BY tNode.node 
+0

我已經試過了,它因爲在子查詢中的LIMIT 1不工作不返回行,其中** tItem.node **匹配** tNode.node **。它結束了查詢返回一個沒有項目數據的節點列表(除了一個)。 – JackoBongo 2012-08-06 09:56:59

+1

是的,這是正確的,我做了錯誤的嘗試。你的子查詢將返回1個結果作爲限制,然後它將加入。結果只有1結果。取消LIMIT並改爲使用組。等待我編輯答案,然後嘗試。 – 2012-08-06 10:14:03

+0

但是,我需要從iItem表中獲取更多列。此外,無論優先級如何,我都需要從子查詢返回一行。 – JackoBongo 2012-08-06 11:34:14