2012-12-12 161 views
0

我有一個關於SQL的問題。從一個sql查詢獲取記錄並在另一個查詢中使用

SELECT TOP (10) ordr.ordID 
FROM [inSight].[dbo].[Orders] ordr 
INNER JOIN [inSight].[dbo].[OrderLines] ordn ON ordr.ordID = ordn.ordID 
JOIN [inSight].[dbo].[OrderLineAttributeValues] atr ON ordn.olnID = atr.olnID 
WHERE 
    atr.atbID=190 AND 
    atr.olnavValue=1 

(上面的查詢返回多個結果)

所以我想要做的是,從上述查詢抓取結果,並通過一個使用它下面的查詢之一。

SELECT op.optCode 
FROM [inSight].[dbo].[Orders] ordr 
INNER JOIN [inSight].[dbo].[OrderLines] ordn ON ordr.ordID = ordn.ordID 
JOIN [inSight].[dbo].[OrderLineOptions] ordlo ON ordn.olnID = ordlo.olnID 
JOIN [inSight].[dbo].[Features] ftr ON ordlo.ftrID = ftr.ftrID 
JOIN [inSight].[dbo].[Options] op ON ftr.ftrID = op.ftrID 
WHERE 
    ordr.ordID = @OrderNumber AND 
    ftr.ftrID = 1477 AND 
    ordlo.optid = op.optID 

上面的變量OrderNumber是第一個查詢的結果。

我不想使用遊標,那麼有沒有其他方法可以解決這個問題?

+2

只需使用'WHERE ordr.ordID在(第一個查詢HERE)' – valex

+0

我需要一個從第一查詢一個獲取記錄! 添加where子句不會有多大幫助! – CodeJockey

+0

你是什麼意思的「一個一個」?上面的查詢中沒有任何需要的查詢。而valex的正確響應不會添加WHERE子句,它只會改變已經存在的那個子句。 – RBarryYoung

回答

1

你看過交叉申請嗎?

這可能會爲你工作:

SELECT op.optCode 
FROM [inSight].[dbo].[Orders] ordr 
INNER JOIN [inSight].[dbo].[OrderLines] ordn ON ordr.ordID = ordn.ordID 
JOIN [inSight].[dbo].[OrderLineOptions] ordlo ON ordn.olnID = ordlo.olnID 
JOIN [inSight].[dbo].[Features] ftr ON ordlo.ftrID = ftr.ftrID 
JOIN [inSight].[dbo].[Options] op ON ftr.ftrID = op.ftrID 
CROSS APPLY (
SELECT TOP (10) ordr.ordID 
FROM [inSight].[dbo].[Orders] ordr 
INNER JOIN [inSight].[dbo].[OrderLines] ordn ON ordr.ordID = ordn.ordID 
JOIN [inSight].[dbo].[OrderLineAttributeValues] atr ON ordn.olnID = atr.olnID 
WHERE 
    atr.atbID=190 AND 
    atr.olnavValue=1 AND 
    ordr.ordID = op.optCode 
    ) ca 
WHERE 
    ftr.ftrID = 1477 AND 
    ordlo.optid = op.optID 
相關問題