2009-08-09 3 views
2

나는이 다음 표 :INSERT INTO..SELECT..ON 중복 키 모호한 식별자

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

나는 지금 : (발기인이 세대가, 유료) 하나의 고유 키가

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 (존재하는 경우)로 동일한 항목을 업데이트하여 지불 한 발기인에 대해 모든 수익을 표시하려고합니다. 이 지불로 내가 프로모터 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) 

이 (사소한 삭제없이) 내 현재의 접근 방식 :

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

이 작동하지 않습니까? 중복 키 업데이트 ON bright_promotion_earnings.turnover = bright_promotion_earnings.turnover + commission.turnover2; – Zed

+0

네, 정말 고마워했습니다. –