2012-08-06 2 views
0

내가 조직 SQLite는 파일에 두 테이블이 조인 노드 이름 SQLite는 : 왼쪽에 LIMIT는 다음과 같이

  • TITEM의 이름을 포함을 포함

    • TNODE, 우선 순위, 부모 노드에 대한 참조 노드는 여러 항목을 가질 수 있습니다. 없이 (

      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

    시도 하위 쿼리 절, 또한 LIMIT 위치를 제거하고 분에 의해 그룹을 추가 한 후

    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 일부터 작동하지 않습니다 row ** tItem.node **는 ** tNode.node **와 일치합니다. 조회가 끝나면 항목 데이터가없는 노드 목록이 반환됩니다 (단 하나 제외). – JackoBongo

    +1

    예, 맞습니다. 잘못된 시도를했습니다. 하위 쿼리는 한도로 결과를 반환 한 다음 가입합니다. 결과가 1 개뿐입니다. 대신 LIMIT을 삭제하고 그룹을 사용하십시오. 잠시 후 답변을 수정하고 시도해 보겠습니다. –

    +0

    그러나 이것은 작동하지만 iItem 테이블에서 추가 열을 가져와야합니다. 또한, 우선 순위에 관계없이 하위 쿼리에서 한 행을 반환해야합니다. – JackoBongo