2012-07-31 199 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 

表3

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

我有三个表,我想搜索t他在TABLE1中DATE,例如10-06-2012和订购例如1并返回ID'a'。

在表2我想它使用表1的结果得到OrdersID

而在表3我想它使用Tables2的结果返回项目 ID是两个表中常见的。

+3

[你尝试过什么?](http://WhatHaveYouTried.com) – 2012-07-31 06:43:10

+0

你尝试过什么吗?它是一个嵌套3级嵌套的简单嵌套查询。 – amitchhajer 2012-07-31 06:43:38

回答

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