2016-11-12 81 views
1

我是SQL新手,無法很好地利用其他類似的問題。SQL無法運行UPDATE查詢,因爲表被指定兩次

我想給所有共用同一間房子的人提供30%的折扣,所以我有一張帶有ID,價格和房子名稱的桌子。

這是我的查詢:

UPDATE person 
SET price= price*0.97 
WHERE house IN (SELECT p.house FROM person p GROUP BY p.house HAVING COUNT(*) >2); 

它說:「表中指定了兩次,既作爲‘更新’的目標,並作爲數據的單獨源」,但我不知道其他的方式來保存字符串並且比較其他聲音。

我該如何繼續?

回答

2

這是MySQL的限制。的解決方案是使用一個JOIN

UPDATE person p JOIN 
     (SELECT p.house 
     FROM person p 
     GROUP BY p.house 
     HAVING COUNT(*) > 2 
     ) ph 
     ON p.house = ph.house 
    SET p.price = p.price * 0.97; 

JOIN做濾波來代替IN運算符。