您不能像直接SQL那样动态选择表格。你需要一个存储过程来完成你想要的。虽然有一些解决方法。
你可以做一些janky在FROM子句这样的:
SELECT *
FROM
(SELECT null as "whatever") as fakeTable
LEFT OUTER JOIN version1 on input_parameter = 1
LEFT OUTER JOIN version2 on input_parameter = 2
LEFT OUTER JOIN version3 on input_parameter = 3
这会起作用,因为input_parameter只能一次一个值。如果你决定你想要version1和version2加入,如果input_parameter是2,那么你最终会交叉连接,并可能上帝怜悯你的灵魂。
你可以做一些janky与UNION:
SELECT * FROM version1 WHERE input_paramter=1
UNION ALL
SELECT * FROM version2 WHERE input_paramter=2
UNION ALL
SELECT * FROM version3 WHERE input_paramter=3
这是更好一点,因为一个螺丝了,只会带回2或3倍的结果,而不是搞砸例子1,你在得到n^2或n^3结果。
我不确定从CPU-I/O的角度来看,哪一个会导致更多的麻烦,但我猜测他们离执行路径的角度非常接近,如果数据很小,反正无所谓。
可能重复的[如何在动态SQL查询中设置表名?](http://stackoverflow.com/questions/20678725/how-to-set-table-name-in-dynamic-sql-query) – Allan 2014-11-14 19:01:20