SQLite:LEFT JOIN上的LIMIT

时间:2012-08-06 09:09:02

标签: sqlite join subquery left-join

我在SQLite文件中有2个表,其组织如下:

  • tNode ,其中包含节点名称
  • tItem ,其中包含名称,优先级以及对其父节点的引用。节点可以有多个项目。

要列出节点及其项目,我只需要进行简单的JOIN查询:

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 个答案:

答案 0 :(得分:1)

尝试删除subQuery中的where子句,同时LIMIT并使用min

添加group by
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