2013-12-18 54 views
2

我有需要連接表B.是否可以在不使用表變量或臨時表的情況下創建一個聯合表格?

表B中的表A是一個常數,2列

year, flag 
---------- 
2010, A1 
2011, A2 
2012, A3 
2013, A4 
2014, A5 

是否有可能像做以下(*在SQL Server無效的語法,只是用它來表示我的意思):

SELECT * 
FROM A RIGHT JOIN (
    2010, 'A1'; 
    2011, 'A2'; 
    2012, 'A3'; 
    2013, 'A4'; 
    2014, 'A5'; 
) 
B ON A.year = B.year 

我不想爲B使用表變量或臨時表。是否有其他選擇?

感謝

+1

爲什麼不創建一個真正的表?爲什麼你不想使用表變量或臨時表? – HLGEM

+0

這是因爲這是存儲過程的一部分。我們需要再次將此查詢連接到其他查詢。如果在sql server中存在這樣的東西,那麼我們可以寫1個查詢,讓sql對其進行優化。如果使用表變量,似乎減慢它。 – urlreader

+0

CTE(Comman Table Expression)是你的朋友:) –

回答

6

是的,你可以使用VALUES計劃中的

SELECT * 
FROM A 
     RIGHT JOIN (VALUES(2010, 'A1'), 
          (2011, 'A2'), 
          (2012, 'A3'), 
          (2013, 'A4'), 
          (2014, 'A5')) B(year, flag) 
     ON A.year = B.year 

該表不但是編制索引,並限制到最大1000行創建文字值的表。

+0

+1新信息不知道this.but是否有任何特殊情況,你必須這樣做? –

+0

這會起作用,但你最好在數據庫中的真實表格中使用,以便在2015年可以添加一個值,並且所用的所有位置都會自動包含該值。這樣你就不必在你的代碼中查找所有的refences。這是在表格中存儲信息的目的之一。 – HLGEM

+0

謝謝。正是我想要的。 – urlreader

相關問題