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)

子查询返回超过 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 回答