[英]SQL: update a field with a value from the same table, only if condition is met
你需要的是別名 :
UPDATE Tgt
SET popularity = (
SELECT Max(popularity)
FROM products Ref
WHERE Ref.brand = Tgt.brand --< Refer by alias
)
FROM Products Tgt --< Give the target table an alias
WHERE sales > 1
試試這個腳本:
SELECT TOP 1 POPULARITY, BRAND
INTO #TEMP
FROM PRODUCTS
WHERE SALES > 1
UPDATE PRODUCTS
SET POPULARITY = B.POPULARITY
FROM PRODUCTS A, #TEMP B
WHERE A.BRAND = B.BRAND
您可以使用JOIN
和派生表執行此操作
UPDATE P1
SET P1.Popularity = P2.Popularity
FROM Products P1
INNER JOIN (SELECT MAX(Popularity) as [Popularity], Brand
FROM Products P2
GROUP BY Brand) P2 on P2.Brand = P1.Brand
WHERE SALES > 1
如果您使用“TOP”,則需要使用ORDER BY,否則無法保證它會為您提供最受歡迎的。 如果您還在尋找最受歡迎的,只有銷售額大於1的地方,您的子查詢中需要一個WHERE語句。 使用別名作為@YB建議,你可以做這樣的事情(在子查詢中有或沒有WHERE)。
UPDATE a
SET popularity=
(
SELECT TOP 1 b.popularity FROM Products b
WHERE b.brand = a.brand
AND sales > 1
ORDER BY b.popularity DESC
)
FROM Products a
WHERE sales > 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.