2016-12-02 58 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中執行此操作。也就是說,構建你想要的查詢。

否則,你可以這樣做:

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

也就是說,UNION ALL結合了兩種可能性。 "A"表示A是一個變量。確切的語法取決於數據庫和訪問機制。

+0

這樣我認爲如果table1和table2包含大量數據(超過1m行),整體性能將會下降很多。畢竟,你確實告訴我可能...感謝戈登。 只是,如果有超過2個表,動態表的數量,它會比問題本身更復雜lol – Sum

+0

@Sum。 。 。當常量條件爲false時,查詢是否從表中讀取任何數據取決於數據庫優化器。大多數優化器會很快返回一個空的結果集。 –

+0

問題是這樣的,有3個表格格式相同,每個表格內容指定月份(tbl1 1-> 4,tbl2 5-> 9,tbl3 10-> 12)。如果我只需要查詢任何月份的數據(1到12),那麼我必須從UNION ALL(tbl1 + tbl2 + tbl3)<---這個減速過程。所以我試圖找到使PC足夠智能的技巧來加載只有必要的表格(因爲每個表格內容超過1米記錄)。 – Sum

0

,如果你正在使用VB,那麼:

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

可以在基本上任何語言做到這一點。