1

このクエリを実行すると、次のエラーが表示されます

UPDATE stockloan_feed 
SET CUSIP =( 
      SELECT CUSIP FROM stockloan_feed_cusip_matching 
      WHERE stockloan_feed_cusip_matching.SEDOL = stockloan_feed.SEDOL OR       
      stockloan_feed_cusip_matching.ISIN = stockloan_feed.ISIN) 
WHERE CUSIP IS NULL and date = DATEDIFF(d, 0, GETDATE()-1)

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

4

2 に答える 2

2
UPDATE t1
SET t1.CUSIP = t2.CUSIP
FROM  stockloan_feed t1
INNER JOIN stockloan_feed_cusip_matching t2 
        ON t2.SEDOL = t1.SEDOL 
        OR t2.ISIN  = t1.ISIN
WHERE t1.CUSIP IS NULL
  AND t1.date = DATEDIFF(d, 0, GETDATE()-1)
于 2012-11-29T15:10:15.563 に答える
1

サブクエリの結果に列の値を割り当てようとしているのですが、サブクエリが複数の値を返しています。

サブクエリからの最初の結果のみが必要なように指定してみてください。

UPDATE stockloan_feed
SET    CUSIP = (SELECT TOP 1 CUSIP
                FROM   stockloan_feed_cusip_matching
                WHERE  stockloan_feed_cusip_matching.SEDOL = stockloan_feed.SEDOL
                        OR stockloan_feed_cusip_matching.ISIN = stockloan_feed.ISIN)
WHERE  CUSIP IS NULL
       AND date = Datediff(d, 0, Getdate() - 1)

もちろん、これは、サブクエリによって返される可能性のあるすべての値が同じであることを前提としています。または、一致する結果のどれがstockloan_feed.CUSIP列に割り当てられてもかまいません。

于 2012-11-29T15:10:32.407 に答える