0

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

(上記のクエリは複数の結果を返します)

私がやりたいことは、上記のクエリから結果を取得し、次のクエリで 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 は、最初のクエリの結果です。

カーソルを使いたくないので、この問題を解決する他の方法はありますか?

4

1 に答える 1

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
于 2012-12-12T21:19:06.287 に答える