我收到以下错误
子查询返回的值超过1。这是不允许的 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。
对于此查询:
UPDATE b
SET b.Products = (SELECT COUNT(pf.Product_Family_ID)
FROM Product_Families pf
INNER JOIN Products p ON pf.Product_Family_ID = p.Product_Family_ID
INNER JOIN Brands b2 on pf.BrandID = b2.Brand_ID
WHERE
pf.Discontinued = 0
AND pf.Live = 0
AND p.Inventory > 0
AND pf.Brand <> ''
GROUP BY
b2.Brand, b2.Brand_ID)
FROM Brands b
INNER JOIN Product_Families pf2 ON b.Brand_ID = pf2.BrandID
WHERE
b.Brand_ID = pf2.BrandID
我知道我只缺少一些东西。谢谢你的帮助。
答案 0 :(得分:0)
您无法为标量值指定非标量值。您的子查询可能会返回一组元组,因为您要求每个组都有COUNT。单独运行子查询:
(Select COUNT(pf.Product_Family_ID)
FROM Product_Families pf
INNER JOIN Products p ON pf.Product_Family_ID = p.Product_Family_ID
INNER JOIN Brands b2 on pf.BrandID = b2.Brand_ID
WHERE
pf.Discontinued = 0
AND
pf.Live = 0
AND
p.Inventory > 0
AND
pf.Brand <> ''
GROUP BY b2.Brand, b2.Brand_ID)
你会看到它返回的内容。您可能需要计算子查询中的所有记录:取出分组。
答案 1 :(得分:0)
感谢您的帮助,这是我使用的解决方案。
IF OBJECT_ID('tempdb..#Temp') IS NOT NULL
/*Then it exists*/
DROP TABLE #Temp
SELECT * INTO #Temp FROM (SELECT
b.Brand_ID,
b.Brand,
COUNT(pf.Product_Family_ID) PFBrandCount FROM Product_Families pf
INNER JOIN Products p ON pf.Product_Family_ID = p.Product_Family_ID
INNER JOIN Brands b on pf.BrandID = b.Brand_ID
WHERE
pf.Discontinued = 0
AND
pf.Live = 0
AND
p.Inventory > 0
AND
pf.Brand <> ''
Group BY b.Brand, b.Brand_ID) data
Update b SET Products = #Temp.PFBrandCount
FROM BRANDS b
INNER JOIN #Temp ON b.Brand_ID = #Temp.Brand_ID
DROP TABLE #Temp
答案 2 :(得分:0)
正如@nicomp所说,您的子查询将返回多个结果,因此只需将结果过滤到特定品牌。
试试这个:
UPDATE b
SET b.Products = Select number (SELECT COUNT(pf.Product_Family_ID) as number, b2.Brand_ID
FROM Product_Families pf
INNER JOIN Products p ON pf.Product_Family_ID = p.Product_Family_ID
INNER JOIN Brands b2 on pf.BrandID = b2.Brand_ID
WHERE
pf.Discontinued = 0
AND pf.Live = 0
AND p.Inventory > 0
AND pf.Brand <> ''
GROUP BY
b2.Brand, b2.Brand_ID)
Where Brand_ID = b.Brand_ID
FROM Brands b
INNER JOIN Product_Families pf2 ON b.Brand_ID = pf2.BrandID
WHERE
b.Brand_ID = pf2.BrandID
这未经过优化,但这可以解决您的错误。