0

我在 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 列。

如何在不必为每列创建一个子查询的情况下实现这一目标?

4

1 回答 1

2

尝试删除子查询中的 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
于 2012-08-06T09:44:12.303 回答