SQL子查询返回了多个值,没有更新它工作正常

时间:2014-10-22 10:49:50

标签: sql sql-server sql-server-2008

此查询有效并返回260行:

SELECT PRODUCTS.ProductResalePrice * ((100 - isnull((select discountperc from CUSTOMERDISCOUNT where CustomerID = CUSTOMERS.CustomerID and CategoryID = products.CategoryID), 0)) / 100) AS incDisc
FROM  PRODUCTS
INNER JOIN SHIPMENTPRODUCTS op ON PRODUCTS.ProductID = op.ProductID
INNER JOIN SHIPMENTS ON op.shipmentid = shipments.shipmentid
INNER JOIN CUSTOMERS ON shipments.CustomerID = CUSTOMERS.CustomerID
left JOIN CUSTOMERDISCOUNT ON CUSTOMERS.CustomerID = CUSTOMERDISCOUNT.CustomerID
    AND PRODUCTS.CategoryID = CUSTOMERDISCOUNT.CategoryID
WHERE op.shipmentid = 1234

这也是260行:

select * from SHIPMENTPRODUCTS where shipmentid = 1234 

但下一个给出:

  

Msg 512,Level 16,State 1,Line 2   子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

update SHIPMENTPRODUCTS set SoldFor = 
    (SELECT PRODUCTS.ProductResalePrice * ((100 - isnull((select discountperc from CUSTOMERDISCOUNT where CustomerID = CUSTOMERS.CustomerID and CategoryID = products.CategoryID), 0)) / 100) AS incDisc
         FROM  PRODUCTS
         INNER JOIN SHIPMENTPRODUCTS op ON PRODUCTS.ProductID = op.ProductID
         INNER JOIN SHIPMENTS ON op.shipmentid = shipments.shipmentid
         INNER JOIN CUSTOMERS ON shipments.CustomerID = CUSTOMERS.CustomerID
         left JOIN CUSTOMERDISCOUNT ON CUSTOMERS.CustomerID = CUSTOMERDISCOUNT.CustomerID
              AND PRODUCTS.CategoryID = CUSTOMERDISCOUNT.CategoryID
         WHERE op.ProductID = SHIPMENTPRODUCTS.productid and op.shipmentid = SHIPMENTPRODUCTS.shipmentid)
where SHIPMENTPRODUCTS.shipmentid = @shipmentId

我真的不知道。也不知道如何开始这个。不同之处仅在于查询1是独立的,而查询2是包含在更新语句中的查询1。

1 个答案:

答案 0 :(得分:1)

我认为这就是你要做的事情:

update SHIPMENTPRODUCTS
set SoldFor = PRODUCTS.ProductResalePrice * ((100 - isnull((select discountperc from CUSTOMERDISCOUNT where CustomerID = CUSTOMERS.CustomerID and CategoryID = products.CategoryID), 0)) / 100)
FROM PRODUCTS
INNER JOIN SHIPMENTPRODUCTS op ON PRODUCTS.ProductID = op.ProductID
INNER JOIN SHIPMENTS ON op.shipmentid = shipments.shipmentid
INNER JOIN CUSTOMERS ON shipments.CustomerID = CUSTOMERS.CustomerID
left JOIN CUSTOMERDISCOUNT ON CUSTOMERS.CustomerID = CUSTOMERDISCOUNT.CustomerID
     AND PRODUCTS.CategoryID = CUSTOMERDISCOUNT.CategoryID
WHERE op.ProductID = SHIPMENTPRODUCTS.productid and op.shipmentid = SHIPMENTPRODUCTS.shipmentid)
where SHIPMENTPRODUCTS.shipmentid = @shipmentId