您不能像直接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