-2

表1

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

表2

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

表3

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

私は 3 つのテーブルを持っており、TABLE1 で DATE を検索したいと考えています。

Table2 では、Table1 の結果を使用して OrdersID を取得したいと考えています。

そして Table3 では、Tables2 の結果を使用してアイテム ID を返すようにしたいと思いますが、両方のテーブルで共通です。

4

1 に答える 1

1

MS SQL Server、MySQL、Oracle のどの RDBMS を使用していますか? tSQLの処理方法、クエリの作成方法、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
于 2012-07-31T07:28:47.967 に答える