У меня есть следующая таблица:ВСТАВИТЬ 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 мог идентифицировать столбец?
Заранее спасибо.
Да, я знаю, что ... это именно моя проблема. Вопрос: Как я могу предоставить таблицу, в которую я вставляю имя, чтобы mysql мог идентифицировать столбец? –
не будет работать? ON DUPLICATE KEY UPDATE bright_promotion_earnings.turnover = bright_promotion_earnings.turnover + Commission.turnover2; – Zed
Да, это сработало, спасибо вам большое. –