2012-08-24 4 views
2

주문 데이터베이스가 있습니다. 각 주문에는 주문시 여러 SKU가있을 수 있습니다. 마찬가지로 SKU는 여러 주문에 첨부 될 수 있습니다. 각 주문에는 작성된 날짜를 저장하는 날짜 필드가 있습니다. 각 주문의 자세한 내용을 얻을 표와 상호 참조 주문 ID를 나열 날짜 범위가 맞지 않음

  • 표 2 = 요약 및 선박 날짜를 주문에 부착 된 모든 SKU 정보를 저장

    • 표 = 정보 테이블

    내가 찾으려고하는 것은 특정 날짜 이후에 주문에 첨부되지 않은 SKU입니다. 즉, 지난 30 일 동안 주문되지 않은 SKU 목록이 필요합니다.

    그것은 작동하지 않아도되지만 2012 년 7 월 21 일 이후에 주문한 SKU를 계속 반환합니다. 다음은 내가 사용하고있는 쿼리입니다.

    SELECT DISTINCT table1.sku, table2.ship_date 
    FROM table1, table2 
    WHERE table1.orderID = table2.orderID 
    AND table2.ship_date NOT BETWEEN DATE ('2012-07-21') and DATE('2012-08-23') 
    ORDER BY table1.ship_date ASC; 
    

    도움이 될 것입니다.

  • 답변

    2

    당신은 SKU 테이블을 not in을 사용하고 기반으로해야합니다

    SELECT sku 
    FROM sku_table -- the table with the complete list of skus 
    where sku not in (
        -- all skus that were ordered after 2012-07-21 
        SELECT sku 
        from table1 
        WHERE order_date > DATE('2012-07-21') 
        union -- fyi union removes duplicates 
        -- all skus that were shipped after 2012-07-21 
        SELECT table1.sku 
        from table2 
        join table1 on table1.orderID = table2.orderID 
        WHERE table2.ship_date > DATE('2012-07-21') 
    ) 
    

    이 쿼리는 주문 된 적이없는 SKU를 반환합니다.

    +0

    질문에 주어진 표를 사용하면이 방법이 최선입니다. 그러나 쿼리는 지난 30 일 동안 주문되지 않은 주문한 SKU 목록을 제공합니다. 정의에 따라 주문되지 않은 다른 SKU가 지난 30 일 동안 주문되지는 않았지만 주문할 수있는 SKU를 정의하는 테이블에만 표시됩니다. 이는 Table1이나 Table2가 아닙니다. –

    +0

    @JonathanLeffler 예 - 질문을 자세히 읽지 않았습니다. 나는'table1'이 SKU의 목록이라고 생각했다. 그에 따라 답변을 편집했습니다. – Bohemian

    관련 문제