mysql - 当插入到 MySQL 中的另一个表时,通过自动递增连接多个表值

标签 mysql database select sql-insert window-functions

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

enter image description here

请注意,category_id 是类别表中category_key 的外键

我想插入到第三个表(名为“catalog”)目录项,这样每个目录 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 查询的示例吗?

谢谢!

最佳答案

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

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

关于mysql - 当插入到 MySQL 中的另一个表时,通过自动递增连接多个表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58317588/

相关文章:

mysql - 谁能解释这个 MySQL 错误?

php - 它保存没有错误,但它仍然没有反射(reflect)在我的数据库中

database - 刮一个phpbb论坛

mysql - 如果其中一项没有结果,如何在范围内选择并打印

MySQL 多选,多 Where 子句

mysql - 在 MySQL 数据库中创建表时出现语法错误

mysql - 我的 sql 语法无法在存储过程中比较本地变量

mysql - 为什么我无法为此列分配外键?

java - 如何在方解石中将项目、过滤器、聚合下推到 TableScan

SQL - 基于查询参数的条件 LIKE 表达式