2010-12-15 57 views
1
SELECT lott.id as lottery_id,lott.abbr,lott.currency,payments.id as payment_id, 
    payment_prizes.prize_id,prizes.name,prizes.currency as prizes_currency 
    FROM lotteries lott 
    JOIN lottery_payments payments 
     ON 
     payments.lottery_id = lott.id 
    JOIN lottery_payment_prizes payment_prizes 
     ON 
     payment_prizes.payment_id = payments.id 
    JOIN lottery_prizes prizes 
     ON 
     prizes.id = payment_prizes.prize_id 
    WHERE lott.currency = "ID" 

我需要更新lottery_prizes表中的所有货币WHERE id是从上面的查询。 我这样做更新列与加入

UPDATE lottery_prizes SET currnecy = 'ID' 
WHERE id IN(SELECT prizes.id 
    FROM lotteries lott 
    JOIN lottery_payments payments 
     ON 
     payments.lottery_id = lott.id 
    JOIN lottery_payment_prizes payment_prizes 
     ON 
     payment_prizes.payment_id = payments.id 
    JOIN lottery_prizes prizes 
     ON 
     prizes.id = payment_prizes.prize_id 
    WHERE lott.currency = "ID") 

我有这样的错误:
/* SQL错误(1093):您不能指定目标表 'lottery_prizes' 的更新在FROM子句*/ 感谢所有

+0

麻烦的mysql漏洞之一... – 2010-12-15 12:32:44

+0

我同意你.. – Oyeme 2010-12-15 12:59:10

回答

6
UPDATE lottery_prizes l 
    JOIN (SELECT prizes.id 
     FROM lotteries lott 
     JOIN lottery_payments payments 
      ON 
      payments.lottery_id = lott.id 
     JOIN lottery_payment_prizes payment_prizes 
      ON 
      payment_prizes.payment_id = payments.id 
     JOIN lottery_prizes prizes 
      ON 
      prizes.id = payment_prizes.prize_id 
     WHERE lott.currency = "ID") t 
     ON t.Id = l.Id 
SET currency = 'ID'   
+0

谢谢你! – Oyeme 2010-12-15 12:29:17

+0

@Oyeme,你应该标记答案正确然后。 – 2010-12-15 12:33:30

+0

@El Yobo,“你可以在4分钟内接受答案” – Oyeme 2010-12-15 12:36:45