你能选择指定表/数据库中的条件吗?
我正在使用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选择)
您可以最简单地在动态SQL中执行此操作。也就是说,构建你想要的查询。
否则,你可以这样做:
SELECT F1
FROM table1
WHERE "A" = 2
UNION ALL
SELECT F1
FROM table2
WHERE "A" <> 2;
也就是说,UNION ALL
结合了两种可能性。 "A"
表示A
是一个变量。确切的语法取决于数据库和访问机制。
这样我认为如果table1和table2包含大量数据(超过1m行),整体性能将会下降很多。毕竟,你确实告诉我可能...感谢戈登。 只是,如果有超过2个表,动态表的数量,它会比问题本身更复杂lol – Sum
@Sum。 。 。当常量条件为false时,查询是否从表中读取任何数据取决于数据库优化器。大多数优化器会很快返回一个空的结果集。 –
问题是这样的,有3个表格格式相同,每个表格内容指定月份(tbl1 1-> 4,tbl2 5-> 9,tbl3 10-> 12)。如果我只需要查询任何月份的数据(1到12),那么我必须从UNION ALL(tbl1 + tbl2 + tbl3) Sum
,如果你正在使用VB,那么:
sql = "select f1 from " & if(A=2,"table1", "table2")
可以在基本上任何语言做到这一点。
是的,你可以做到这一点,但基本上与vb相同。你可以创建动态的sql。 –
在vb/c#中比在SQL中更好。根据变量生成SQL,然后执行 – GurV
谢谢,这个SQL字符串的代码太EZ了。我只想看看是否有一种使用本机SQL的方式(但不能总体上降低性能)。 – Sum