【问题标题】:How to insert rows for each of the TYPE column?如何为每个 TYPE 列插入行?
【发布时间】:2021-02-24 16:52:57
【问题描述】:

如何为每个类型列插入行?如果有两种类型,类型 1 和类型 2,那么我需要插入两行,还需要更改整个表的 order 和 id 值。

当前状态:

CHOICE表格

id  choice  type    order
1    AA      1       1
2    BB      1       2
3    CC      1       3
4    AAA     2       4
5    BBB     2       5
6    CCC     2       6
7    DDD     2       7

需要更新的表格: 现在我想为每种类型插入选项“000”。更新后的表格如下所示。我怎样才能做到这一点?

更新了CHOICE表格

id  choice  type    order
1    000     1       1
2    AA      1       2
3    BB      1       3
4    CC      1       4
5    000     2       5
6    AAA     2       6
7    BBB     2       7
8    CCC     2       8
9    DDD     2       9

这里,id 和 order 列再次序列化。

实际表格太大,无法通过编辑插入。请帮助这个复杂的查询。我不知道如何解决这个问题。

【问题讨论】:

    标签: mysql sql database sql-insert


    【解决方案1】:

    使用insert . . . select 插入行:

    insert into choice (choice, type)
        select distinct '000', type
        from choice;
    

    这假定id 是自动分配的(这将与您的示例不同)。

    不过,您似乎也想更新order。为此,我建议更新:

    update choice c join
           (select c2.*,
                   row_number() over (partition by choice order by (order is null) desc, order) as new_order
            from choice c2
           ) c2
           on c.id = c2.id
        set c.order = c2.new_order;
    

    作为编辑评论,order 是一个非常糟糕的列名选择,因为它是一个 SQL 关键字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      相关资源
      最近更新 更多