2016-12-02 6 views
0

私はADOを使用してデータベースから項目を照会しています(Excelファイル、accdb、mdb ...) 今私は混乱しています:SQL内で条件を設定してテーブル/ DBを選択できますか?通常 :私は何を期待条件を指定してテーブル/データベースを指定することでデータを選択できますか?

SELECT Field1 FROM table1 

if A=2 then SELECT F1 FROM table1 else SELECT F1 from table2 

またはこのよう:

SELECT F1 from switch(A=2, table1, true, Table2) 

私は状態からSQL文字列を作成することで、VBでこれを行うことができますが、私はしないでください任意のネイティブSQL文がこれを行うことができるかどうかを知る(スイッチテーブル/選択するExternalDB)

+0

はい、あなたはそれを行うことができますが、それは基本的に同じ行のVBに沿っています。動的SQLを作成できます。 –

+0

これはvb/c#の方がSQLよりも優れています。変数に基づいてSQLを生成してから – GurV

+0

SQLの文字列があまりにもezです。私は、ネイティブSQLを使用する方法があるかどうかを確認したいだけです(全体的なパフォーマンスは低下しません)。 – Sum

答えて

0

これは動的SQLで最も簡単に行うことができます。つまり、必要なクエリを作成します。

そうでない場合は、あなたが行うことができます:UNION ALLは二つの可能性を兼ね備えた、ある

SELECT F1 
FROM table1 
WHERE "A" = 2 
UNION ALL 
SELECT F1 
FROM table2 
WHERE "A" <> 2; 

"A"は、Aが変数であるという事実を表しています。正確な構文は、データベースとアクセスメカニズムによって異なります。

+0

この方法では、table1とtable2の内容に多くのデータ(1m行以上)が含まれていると、全体のパフォーマンスが低下すると思います。結局、あなたは私にそれが可能であることを示した...ゴードンに感謝します。 ちょうど、2つ以上のテーブル、動的なテーブルの数がある場合、それは問題自体よりも複雑になります。lol – Sum

+0

@Sum。 。 。定数条件がfalseのときにクエリがテーブルからデータを読み取るかどうかは、データベースオプティマイザによって異なります。ほとんどのオプティマイザは空の結果セットを非常に迅速に返します。 –

+0

問題はこのように、3つのテーブルが同じフォーマットで、各テーブルの内容は月を指定します(tbl1 - > 4、tbl2 5-> 9、tbl3 10 - > 12)。どんな月(1から12)でもデータを照会する必要がある場合は、UNION ALL(tbl1 + tbl2 + tbl3)<---この減速プロセスから照会する必要があります。だから私は、PCが必要なテーブルだけを読み込むのに十分なスマートなトリックを見つけようとしています(各テーブルの内容は1mレコード以上です)。 – Sum

0

あなたはVBを使用している場合:

sql = "select f1 from " & if(A=2,"table1", "table2") 

をあなたは基本的に任意の言語でこれを行うことができます。

関連する問題