SQLite:对左连接的限制
我在一个SQLite文件中有两个表,其组织如下:SQLite:对左连接的限制,sqlite,join,subquery,left-join,Sqlite,Join,Subquery,Left Join,我在一个SQLite文件中有两个表,其组织如下: 包含节点名称的tNode tItem,其中包含名称、优先级和对其父节点的引用。一个节点可以有多个项目 要列出节点及其项,我只需进行一个简单的连接查询: SELECT tNode.node, ..., tItem.itemName, tItem.itemPriority, ... FROM tNode LEFT JOIN tItem ON tItem.node=tNode.node ORDER BY tNode.node 但是现在我想要包含该
- 包含节点名称的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列
如何在不必对每列进行一个子查询的情况下实现这一点?删除子查询中的where子句后,尝试使用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
我已经尝试过了,但它不起作用,因为子查询中的LIMIT 1不会返回tItem.node与tNode.node匹配的行。结果查询返回一个没有项目数据的节点列表(只有一个除外)。您的子查询将返回1个结果(截止日期),然后它将加入。仅产生1个结果。请删除限制并改用group by。请稍候,我正在编辑答案,然后重试。此操作有效,但我需要从iItem表中获取其他列。此外,我需要从子查询返回一行,而不管其优先级如何。