2011-10-08 14 views
1

我有一個這樣的表結構。「選擇」與「有序對」

ProductCR productID ProductName 
09   1553  A1 
09   1600  A2 
09   1800  A3 
10   1553  A4 
10   1600  A5 
10   2000  A6 

我想讓這樣的事情:

Select ProductoName from Products where (ProductCR,ProductID) in ((09,1553),(10,1600),(10,2000)) 

Result: 
    A1 
    A5 
    A6 

這是更多鈔票在SQL服務器?這樣的「選擇」與「有序對」? 謝謝, Victor。

+0

運行這個命令給你什麼? – Astha

+0

我想要產品名稱A1,A5,A6的記錄 – vicmp3

+0

我在詢問你什麼時候在那裏運行你的查詢它說什麼類型的錯誤?那麼Andomar的查詢會爲你做。 – Astha

回答

1

這是不可能的。我這是個不錯的選擇:

DECLARE @orderedPairs TABLE (cr int, id int) 

INSERT INTO @orderedPairs (cr, id) 
VALUES (09,1553),(10,1600),(10,2000) 

SELECT ProductName 
    FROM Products 
    join @orderedPairs on ProductCR = cr 
        and ProductID = id 
+0

我是新來的SQL,我不知道表變量,我想我會讀它。 因此,如果我用這個Table變量進行查詢,那麼當查詢關閉時,這個表將被刪除? – vicmp3

+0

是的。你可能也想讀一些關於臨時表的東西。有時是更好的變量表,許多其他時間是更好的時態表。 – DavidEG

+0

請注意,表變量對於少量數據將表現良好,但對於大數據集,優化器可能會選擇錯誤的執行計劃。 – RyanHennig

1

Oracle allows that,但是SQL Server沒有。你必須寫出來:

select ProductoName 
from Products 
where ProductCR = 09 and ProductID = 1553 or 
     ProductCR = 10 and ProductID = 1600 or 
     ProductCR = 10 and ProductID = 2000 
+0

是的,我知道Oracle允許它,我認爲Sql Server會有類似的東西 – vicmp3