2012-08-06 54 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