2011-08-02 5 views
0

SQL 쿼리를 작성하는 데 도움이 필요합니다.SQL 쿼리에 대한 도움말

나는 2 개 테이블이 필드가 테이블 프로젝트와 제품을 가지고 :

PROJECT :

  • PROJECTCODE
  • PROJECTNAME

제품 :

ITEMNAME는
  • PROJECTCODE
  • REPLACEDBYCODE 다른 ITEMCODE 포함
  • REPLACEDBYCODE (의미,이 제품이 다른 제품으로 대체되었다)

    • ITEMCODE. 제품이 아직 교체되지 않은 경우 REPLACEDBYCODE는 공백 값 ''을 갖습니다.

      ITEMCODE | ITEMNAME | REPLACEDBYCODE | **REPLACED_ITEM_NAME** | PROJECTNAME 
      

      감사 :

      는이 같은 모든 제품에 대한 보고서를 만들고 싶어.

  • +0

    사용중인 RDBMS (예 : SQL Server, Oracle, Postgres, MySQL)에 질문을 태그하십시오. –

    답변

    1

    외부 조인을 통해 PRODUCT에 가입해야합니다. 즉, 쿼리는 모든 항목을 반환하고 교체 코드가있는 해당 테마의 새 이름을 표시합니다.

    select p1.itemcode 
         , p1.itemname 
         , p1.replacedbycode 
         , p2.itemname replaced_item_name 
    from product p1 
         left outer join product p2 
          on p1.replacedbycode = p2.itemcode 
    /
    

    참고 :이은 ANSI 구문을 가입입니다. RDBMS의 일부 기능에는 외부 조인에 대한 대체 구문 (예 : Oracle pre-9i)이있을 수 있습니다.

    +0

    감사합니다. 작동합니다! – ewlung

    1

    당신은 자신을 테이블에 가입 할 수 있습니다 :

    SELECT p.itemcode, p.itemname, p.replacedbycode, r.itemname, j.projectname 
    FROM product as p JOIN product as r ON(p.replacedbycode = r.itemcode) 
            JOIN project as j ON(p.projectcode = j.projectcode); 
    

    당신이 다음에 COALESCE을 사용할 수있는 데이터베이스를 사용하는 더 관용적 방법입니다 replacedbycode 오히려 빈에 비해 acutally null이라는 규칙을 사용하는 경우 두 번째 경우에 내가 지정한 대체이없는 행을 포함 왼쪽 외부 조인 사용하고 있음을

    SELECT p.itemcode, p.itemname, p.replacedbycode, COALESCE(r.itemname, "no replacement"), j.projectname, 
    FROM product as p LEFT JOIN product as r ON(p.replacedbycode = r.itemcode) 
            JOIN project as j ON(p.projectcode = j.projectcode); 
    

    참고 : 대체 항목이 없습니다 경우 꽤 오류 메시지를 인쇄합니다.

    replacebycode 열에는 itemcode 열에 외래 키 제약 조건이 있어야합니다.이 경우 값으로 빈 문자열을 넣을 수 없어야합니다.

    +0

    이제 나는 골라서에 대해 배웠습니다. 감사. – ewlung