2012-07-31 2 views
-2

TABLE1SQL 쿼리 세 테이블

ID |  DATE    Ordered 
a | 10-06-2012 |  1 
b | 07-07-2012 |  1 
c | 10-06-2012 |  0 

TABLE2

ID | OrdersID 
a |  001 
b |  002 
c |  003 

TABLE3

OrdersID | Items | 
001  | 5 | 
002  | 3 | 
003  | 7 | 

나는 세 개의 테이블이 있고 내가 검색하고 싶은 t 그는 TABLE1에 날짜를 기입합니다. 예 : 10-06-2012 1을 반환하고 ID 'a'를 반환합니다.

표 2에서 나는

OrdersID

를 얻기 위해 표 1의 결과를 사용하고 싶습니다 그리고 표 3에서 나는 ID가 두 테이블에 공통적 인 항목을 반환하는 테이블 2의 결과를 사용하고 싶습니다.

+3

[당신은 무엇을 시도?] (http://WhatHaveYouTried.com) –

+0

당신은 아무것도 시도? 중첩 수준이 3 단계 인 간단한 중첩 쿼리입니다. – amitchhajer

답변

1

RDBMS를 사용하고 계십니까? MS SQL Server, MySQL, Oracle? handle tSQL, create queries, use Joins 등과 같은 방법에 대한 조사를 수행하면 문제가되지 않습니다.

여기서 제공하는 데이터로 수행 할 수있는 작업의 샘플은 MS SQL Server를 사용하는 경우입니다. 수 자르, 중첩 된 쿼리 등 지독하게 느린 확인하여 인덱스, 기본 키가 될 수

--get from Table1 Id's filtering by date and Ordered fields 
SELECT t1.Id 
    FROM Table1 t1 JOIN Table2 t2 
WHERE t1.[Date] = '10062012 00:00:00' 
    AND t1.Ordered = 1 

--get from Table2 OrderedID filtered by previous query 
SELECT t2.OredersID 
    FROM Table2 t2 
WHERE t2.ID IN (SELECT t1.Id 
        FROM Table1 t1 JOIN Table2 t2 
        WHERE t1.[Date] = '10062012 00:00:00' 
        AND t1.Ordered = 1 
       ) 

--get from Table3 Items filtered by previous query 
SELECT t3.Items 
    FROM Table3 t3 
WHERE t3.OrdersID IN (SELECT t2.OrdersID 
         FROM Table2 t2 
         WHERE t2.ID IN (SELECT t1.Id 
              FROM Table1 t1 JOIN Table2 t2 
             WHERE t1.[Date] = '10062012 00:00:00' 
              AND t1.Ordered = 1 
             ) 
        ) 

--Using JOINS, not sure if this is 100% correct 
--get from Table3 
SELECT t3.Items 
    FROM Table3 t3 
     JOIN Table2 t2 ON t3.OrdersID = t2.OrdersID 
     JOIN Table1 t1 ON t2.ID = t1.ID 
WHERE t1.[Date] = '10062012 00:00:00' 
    AND t1.Ordered = 1