2009-08-09 2 views
2

У меня есть следующая таблица:ВСТАВИТЬ INTO..SELECT..ON ПОВТОРЯЮЩИХСЯ КЛЮЧЕЙ неоднозначных 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) 

Существует один уникальный ключ (промоутер, поколение, оплаченный):

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

Теперь я хотите отмечать каждый заработок промоутера как оплаченного путем обновления той же записи с платной = 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 DUPLICATE KEY UPDATE bright_promotion_earnings.turnover = bright_promotion_earnings.turnover + Commission.turnover2; – Zed

+0

Да, это сработало, спасибо вам большое. –