2016-12-02 28 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") 

可以在基本上任何语言做到这一点。

相关问题