代码之家  ›  专栏  ›  技术社区  ›  André Hoffmann

插入到..选择..在重复键上不明确的ID

  •  2
  • André Hoffmann  · 技术社区  · 16 年前

    我有下表:

    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)
    

    现在,我想通过更新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)
    

    这是我当前的方法(不使用简单的删除操作):

    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可以识别该列?

    事先谢谢。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Zed    16 年前

    两个表中都有一个周转字段,所以MySQL无法决定最后一行的含义。

    推荐文章