2011-08-12 5 views
0

私は、別々にうまく機能しているクエリをいくつか持っています。これらのクエリのそれぞれは、ユーザーが結果を検索する際に使用する可能性のある別のタイプのフィルタに関連しています。各問合せは、データベース内の5つの表からまったく同じ列を取得します。私が習得したいのは、フィルタを累積的に使用することです(つまり、日付期間、名前などで、または場所とステータスで検索することができます)累積的なMySQLクエリ。複数のFROM文を使用するにはどうすればよいですか?

個別のクエリをまとめてその結果を次の照会の開始点として使用することができます。私は交差について読んできましたが、これはMySQLでどのように達成されましたか?私はこれをしたいとは思いません。これを行うには、すべてのクエリを全部実行してから、たくさんの時間。

私は思ったより小さいと思われるクエリから始め、結果を得て、その結果を次のクエリの開始点として使用したいと考えています。これは、各フィルターの5000レコードの複数の表を検索する次の照会、または結果を200個未満の照会と、既にレイアウトされた表がある次の照会にホーニングすることの違いになります。

SELECT * FROM 
    (SELECT * FROM table1, table2, table3 WHERE DATE(trans_date) 
    BETWEEN DATE(from_date) AND DATE(to_date) 
     FROM (SELECT * FROM table1, table2, table3 
     WHERE name = "Joe" AND lname = "Bloggs")) 
WHERE status = "Open" 

これが可能である:

は、私は私のような構文を使用することができるかもしれ思いましたか?

感謝

+2

ような何かをしたいけどWHERE DATE(FROM_DATE)AND DATE BETWEEN DATE(TRANS_DATE) (to_date)AND name = "Joe" AND lname = "Bloggs" AND status = "Open" ...副問合せの必要はありませんimho –

+1

私はHansに同意します。これは時期尚早の最適化のようなものです。パフォーマンスのためにそのようなクエリをネストする必要はありません。テーブルに適切なインデックスがある場合は、すべての条件を1つのWHERE句に入れることができ、クエリオプティマイザは最適なフィルタリング戦略を策定できます。 – Simon

+0

本当に同じ列の5つのテーブルがある場合、データモデリングの問題があると思います。データは断片化されていますか(各テーブルの異なるキー)または重複していますか(各テーブル内の同じキーですが、非キーデータの列/値は異なります)。 – APC

答えて

1

- はい。ほとんどのRDBMSは、IIRC FROM内の各サブクエリの別名、いけないあなただけのテーブル1、テーブル2、表3 SELECT * FROMのような構文を作るのはなぜ

SELECT * 
FROM (
SELECT * 
FROM .... 
WHERE ... 
) AS sub1 
関連する問題