>source

이해하려고 해요가입하다()내장jq.

jq 매뉴얼( https://stedolan.github.io/jq/manual):

JOIN($idx; stream; idx_expr; join_expr):
This builtin joins the values from the given stream to the given index.
The index's keys are computed by applying the given index expression to each value from the given stream.
An array of the value in the stream and the corresponding value from the index is fed to the given join expression to produce each result.

예제 없이는 이해하기 어렵습니다.

작동 방식을 보여주는 사용법의 몇 가지 예를 들어 주시겠습니까?

  • 답변 # 1

    이 함수는 다음과 같아야 합니다.가입하다의 절SQL. 두 개 이상의 행을 결합하는 데 사용됩니다.SQL) 테이블 사이의 관련 열을 기반으로 합니다.

    "테이블"을 만들어 봅시다.

    첫 번째 항목은 ID가 있는 주문 목록이어야 하며 주문 고객 및 주문한 제품에 대한 ID 참조가 있어야 합니다.

    [
      {
        "OrderID": "10",
        "CustomerIDRef": "2",
        "ProductIDRef": "7"
      },
      {
        "OrderID": "11",
        "CustomerIDRef": "1",
        "ProductIDRef": "7"
      },
      {
        "OrderID": "12",
        "CustomerIDRef": "2",
        "ProductIDRef": "14"
      },
      {
        "OrderID": "13",
        "CustomerIDRef": "2",
        "ProductIDRef": "7"
      }
    ]
    as $orders
    

    두 번째 항목은 이름에 매핑된 고객 목록입니다.

    [
      {
        "CustomerID": "1",
        "CustomerName": "Alfred"
      },
      {
        "CustomerID": "2",
        "CustomerName": "Bill"
      },
      {
        "CustomerID": "3",
        "CustomerName": "Caroline"
      }
    ]
    as $customers
    

    jq로가입하다한 번에 두 개의 테이블만 처리합니다(더 많은 경우 계단식으로 연결해야 함). 누락된 Products 테이블은 무시하겠습니다.

    우리가 도착하기 전에가입하다우리는 볼 필요가있다인덱스첫 번째는 위의 테이블과 같은 배열을 필드 이름으로 테이블의 "기본 키"가 있는 객체로 바꾸는 것입니다. 이는 필드 이름이 고유하고 조회를 렌더링하여 항상 두 개 이상의 레code를 반환하지 않기 때문에 합리적입니다.

    INDEX($customers[]; .CustomerID)
    

    {
      "1": {
        "CustomerID": "1",
        "CustomerName": "Alfred"
      },
      "2": {
        "CustomerID": "2",
        "CustomerName": "Bill"
      },
      "3": {
        "CustomerID": "3",
        "CustomerName": "Caroline"
      }
    }
    

    데모

    이제 우리는 쉽게가입하다주문("왼쪽 테이블")과 고객("오른쪽 테이블") 간의 작업. "올바른 테이블" 제공인덱스ed 객체, 스트림으로서의 "왼쪽 테이블".[], 그리고 오른쪽 테이블의 기본 키(조회 개체의 필드 이름)와 일치하는 왼쪽 테이블 개체의 필드로 "관련 열"을 얻으면 다음을 얻습니다. (마지막 매개변수는 그냥.당분간)

    JOIN(INDEX($customers[]; .CustomerID); $orders[]; .CustomerIDRef; .)
    

    [
      {
        "OrderID": "10",
        "CustomerIDRef": "2",
        "ProductIDRef": "7"
      },
      {
        "CustomerID": "2",
        "CustomerName": "Bill"
      }
    ]
    [
      {
        "OrderID": "11",
        "CustomerIDRef": "1",
        "ProductIDRef": "7"
      },
      {
        "CustomerID": "1",
        "CustomerName": "Alfred"
      }
    ]
    [
      {
        "OrderID": "12",
        "CustomerIDRef": "2",
        "ProductIDRef": "14"
      },
      {
        "CustomerID": "2",
        "CustomerName": "Bill"
      }
    ]
    [
      {
        "OrderID": "13",
        "CustomerIDRef": "2",
        "ProductIDRef": "7"
      },
      {
        "CustomerID": "2",
        "CustomerName": "Bill"
      }
    ]
    

    데모

    보시다시피 각 주문에 대해 하나씩 배열 스트림을 얻습니다. 각 배열에는 왼쪽 테이블의 레code와 오른쪽 테이블의 두 가지 요소가 있습니다. 실패한 조회는없는우측에서.

    마지막으로 "조인 표현식"인 네 번째 매개변수는 두 개의 일치하는 레code를 조인하는 방법을 설명합니다.지도.

    JOIN(INDEX($customers[]; .CustomerID); $orders[]; .CustomerIDRef;
      "\(.[0].OrderID): \(.[1].CustomerName) ordered Product #\(.[0].ProductIDRef)."
    )
    

    10: Bill ordered Product #7.
    11: Alfred ordered Product #7.
    12: Bill ordered Product #14.
    13: Bill ordered Product #7.
    

    데모

    훌륭한 설명! 매우 명확한! 고마워!

    Logan Lee2022-02-15 06:31:07
  • 이전 Github readme에 게시된 종이 URL 링크를 참조 자료로 삽입하는 방법이 있습니까?
  • 다음 R Shiny에서 입력 텍스트 필드 정렬