【问题标题】:Concatenate multiple tables values with auto increment when inserting to another table in MySQL插入到 MySQL 中的另一个表时,使用自动增量连接多个表值
【发布时间】:2020-02-07 14:01:47
【问题描述】:

我在 MySQL 中有 2 个表,如下所示:

注意category_id是categories表中category_key的FOREIGN KEY

我想插入到第三个表(名为“目录”)目录项,这样每个目录 ID 都将从它的类别和子类别 ID 生成,并为每个类别-子级联自动递增编号类别 ID。

例如:

假设我们在 "categories" 表中有一行,其 category_key 为 "ABC",并且我们在 "sub_categories" 表中也有一行,其 sub_category_key 为 "EFG",所以目录表中的一行将有键“ABC-EFG-0001”,同一子类别中的另一个将具有“ABC-EFG-0002”,依此类推。

例如,对于其他 ID 值。 category_id="OMG" 和 sub_category_id="YYY",数字的递增会从 1 开始,所以 ID 为“OMG-YYY-0001”。

我可以举一个 INSERT 查询的示例吗?

谢谢!

【问题讨论】:

  • categoriessub_categories是什么关系,即categories中的哪一列关联外键sub_categoriers(category_id)
  • @GMB 是的,谢谢,这篇文章是用这个澄清编辑的
  • 好的,所以两列应该具有相同的数据类型:sub_categories(category_id) 也应该是 string 列(实际上最好命名为 category_key)。

标签: mysql database select sql-insert window-functions


【解决方案1】:

您可以使用ROW_NUMBER()(在 MySQL 8.0 中提供)来分配数字,并使用 LPAD() 来格式化它们。请注意,您不需要使用表categories,因为所有相关信息都可以在sub_categories 中找到(但如果您确实需要,您只需添加JOIN)。

INSERT INTO catalog
SELECT 
    sc.*,
    CONCAT(
        category_key,
        '-',
        sub_category_key,
        '-',
        LPAD(
            ROW_NUMBER() OVER(PARTITION BY category_key, sub_category_key ORDER BY sub_category_key),
            4,
            0
        ) 
    )
FROM sub_categories sc

【讨论】:

    猜你喜欢
    • 2013-07-20
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 2015-02-03
    相关资源
    最近更新 更多