2009-08-09 13 views
2

私は、次の表を持っている:INSERT INTO..SELECT..ON DUPLICATE KEYSあいまいなIDS

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) 

1つの一意のキー(プロモーター、世代、払っ)があります:

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

今、私は同じエントリをpaid = 1(それが存在する場合)で更新することによって支払われるプロモーターのためのすべての収益をマークしたいと思う。これを支払ったとして、私は、プロモーター4の利益をマークしたいのであれば

は、テーブルがどのように見えるかです:

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

これは(自明であるDELETEなし)私の現在のアプローチです:

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; 

が、MySQLは、売上高があいまいである私に言って続けて:

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

は誰をい私が挿入しているテーブルに別名を付けることができないので、ヒントがあります。

mysqlが列を識別できるように、私は名前に挿入するテーブルをどのように与えることができますか?

ありがとうございます。

答えて

5

あなたは両方のテーブルにターンオーバーフィールドを持っているので、mysqlは最後の行を意味するものを決定できません。

+1

はい私はそれを知っています。それはまさに私の問題です。 質問: mysqlが列を識別できるように名前を挿入するテーブルを与えるにはどうすればよいですか? –

+7

これは機能しませんか? 重複キー更新で表示bright_promotion_earnings.turnover = bright_promotion_earnings.turnover + commission.turnover2; – Zed

+0

ありがとうございました。ありがとうございました。 –

関連する問題