【问题标题】:Generate new ID for every new combination of column 1 and column 2为第 1 列和第 2 列的每个新组合生成新 ID
【发布时间】:2021-01-31 20:06:54
【问题描述】:

我想为第 1 列和第 2 列的每个新组合生成一个新 ID 号。 例如:

ID | column 1 | column 2
1  | peter    | blue
2  | mark     | red
1  | peter    | blue

随着时间的推移会添加新的行和新的值,这应该能够自动更新。 我尝试了 DENSE_RANK(),这似乎有效。但是当我将它作为一个语句放在计算列中时它给出了一个错误,所以我想这是不可能的? (对 SQL 来说还是很新)。

感谢您的帮助!

错误消息:#1901 - 函数或表达式 'dense_rank()' 不能 在 `ProductIdentifier

的 GENERATED ALWAYS AS 子句中使用

编辑: 我基本上想要的是基于 2 列将一行链接到另一个表。当然,我也可以将两列连接起来,但我在某处读到使用字符串执行此操作会更慢。它最终将是一个大表,目前有 200.000 多行并增长到数百万行。这是我可以/应该做的事情吗?

【问题讨论】:

    标签: sql mariadb window-functions mariadb-10.3


    【解决方案1】:

    我不明白。如果您希望column1/column2 是唯一的,那么它们应该在自己的表中:

    create table t12 (
        t12_id int auto_increment primary key,
        column1 int,
        column2 int,
        unique (column1, column2)
    );
    

    这为您似乎想要的一对提供了独特的价值。

    【讨论】:

      【解决方案2】:

      如您所见,您不能在生成的列中使用窗口函数。但是,您可以在视图中动态计算信息:

      create view myview as
      select id, column1, column2, dense_rank() over(order by column1, column2) rn
      from mytable
      

      然后你可以查询视图而不是表,比如:

      select * from myview;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-14
        • 2019-01-21
        • 2012-10-30
        • 2016-10-20
        • 1970-01-01
        • 1970-01-01
        • 2019-09-12
        相关资源
        最近更新 更多