Ich habe die folgende Tabelle:INSERT INTO..SELECT..ON DUPLICATE KEYS mehrdeutig 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)
Es gibt einen eindeutigen Schlüssel (Promotor, Generation, bezahlt):
+---------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| 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)
I Now jeden Verdienst für einen Promoter als bezahlt markieren möchten, indem Sie den gleichen Eintrag mit bezahlt = 1 aktualisieren (falls vorhanden).
Also, wenn ich das Ergebnis von Promoter 4 dies als bezahlt markieren wollte, ist, was die Tabelle aussehen soll:
+----+----------+------------+----------+-------+
| 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)
Dies ist mein aktueller Ansatz (ohne die DELETE, die trivial ist):
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;
Aber mysql hält mir den Umsatz zu sagen ist nicht eindeutig:
#1052 - Column 'turnover' in field list is ambiguous
Hat jemand habe einen Hinweis, da ich die Tabelle, die ich einfüge, nicht als Alias verwenden kann.
Wie kann ich die Tabelle, die ich einfüge, einem Namen geben, damit mysql die Spalte identifizieren kann?
Vielen Dank im Voraus.
Ja, ich weiß das ... das ist genau mein Problem. Die Frage ist: Wie kann ich der Tabelle geben ich einen Namen einfügen, so dass mysql die Spalte identifizieren kann? –
würde das nicht funktionieren? ON DUPLICATE KEY AKTUALISIERUNG bright_promotion_earnings.turnover = bright_promotion_earnings.turnover + commission.turnover2; – Zed
Ja das hat dir sehr geholfen. –