2010-12-15 43 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" 

Je dois mettre à jour toutes les devises de la table lottery_prizes où les ID proviennent de la requête ci-dessus. Je l'ai faitMISE À JOUR Colonne avec jointure

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") 

J'ai cette erreur:
/* Erreur SQL (1093): Vous ne pouvez pas spécifier la table cible 'lottery_prizes' pour la mise à jour dans la clause FROM */ Merci à tous

+0

L'un des défauts mysql ennuyeux ... –

+0

je suis d'accord avec vous .. – Oyeme

Répondre

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

Merci l'homme! Ça marche! – Oyeme

+0

@Oyeme, vous devriez marquer la réponse correcte alors. –

+0

@El Yobo, "Vous pouvez accepter une réponse en 4 minutes" – Oyeme