2009-08-09 5 views
2

je le tableau suivant:INSERT INTO..SELECT..ON clés dupliquées ids ambiguës

mysql> SELECT * FROM `bright_promotion_earnings`; 
+----+----------+------------+----------+-------+ 
| id | promoter | generation | turnover | payed | 
+----+----------+------------+----------+-------+ 
| 1 |  4 |   1 |  10 |  0 | 
| 3 |  4 |   5 |  100 |  0 | 
| 4 |  4 |   3 | 10000 |  1 | 
| 5 |  4 |   3 |  200 |  0 | 
+----+----------+------------+----------+-------+ 
4 rows in set (0.00 sec) 

Il y a une clé unique (promoteur, génération, payé):

+---------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table      | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+---------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| bright_promotion_earnings |   0 | promoter_2 |   1 | promoter | A   |   2 |  NULL | NULL | YES | BTREE  |   | 
| bright_promotion_earnings |   0 | promoter_2 |   2 | generation | A   |   4 |  NULL | NULL |  | BTREE  |   | 
| bright_promotion_earnings |   0 | promoter_2 |   3 | payed  | A   |   4 |  NULL | NULL |  | BTREE  |   | 
+---------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
3 rows in set (0.00 sec) 

Maintenant, je vouloir marquer chaque gain pour un promoteur comme payé en mettant à jour la même entrée avec paid = 1 (si elle existe).

Donc, si je voulais marquer le bénéfice du promoteur 4 comme payé c'est ce que la table devrait ressembler à:

+----+----------+------------+----------+-------+ 
| id | promoter | generation | turnover | payed | 
+----+----------+------------+----------+-------+ 
| 4 |  4 |   3 | 10200 |  1 | 
| 6 |  4 |   5 |  100 |  1 | 
| 7 |  4 |   1 |  10 |  1 | 
+----+----------+------------+----------+-------+ 
3 rows in set (0.00 sec) 

Ceci est mon approche actuelle (sans SUPPRIMER qui est trivial):

INSERT INTO 
    bright_promotion_earnings 
    (
     promoter, 
     generation, 
     turnover, 
     payed 
    ) 
SELECT 
    commission.promoter, 
    commission.generation, 
    commission.turnover as turnover2, 
    '1' as payed 
FROM 
    bright_promotion_earnings as commission 
WHERE 
    promoter=4 
    AND payed=0 
ON DUPLICATE KEY UPDATE turnover=turnover+turnover2; 

Mais mysql ne cesse de me dire que le chiffre d'affaires est ambigu:

#1052 - Column 'turnover' in field list is ambiguous 

Quelqu'un Avoir un indice car je ne peux pas alias la table que j'insère.

Comment puis-je donner à la table que j'insère un nom afin que mysql puisse identifier la colonne?

Merci d'avance.

Répondre

5

vous avez un champ de chiffre d'affaires dans les deux tables, donc mysql ne peut pas décider lequel vous voulez dire à la dernière rangée.

+1

Oui, je sais que ... c'est exactement mon problème. La question est: Comment puis-je donner à la table que j'insère un nom pour que mysql puisse identifier la colonne? –

+7

cela ne fonctionnerait-il pas? SUR LA MISE À JOUR DE LA CLÉ DUPLICATE bright_promotion_earnings.turnover = bright_promotion_earnings.turnover + commission.turnover2; – Zed

+0

Oui cela a fonctionné merci beaucoup. –

Questions connexes