【问题标题】:Column dependent on serial column in posgresql列依赖于 postgresql 中的串行列
【发布时间】:2020-01-11 15:47:09
【问题描述】:

我正在使用 Java 的预处理语句来提交插入语句。我有两个我关心的专栏:

create table(a serial, b integer)

我想使用 generate_series(1, 10000) 插入

但是,我想设置整数

B = A mod 10

是否有 SQL 来执行此操作?我想一次性实现这一点,这样我就可以给 Java 的准备好的语句一个字符串。

例如INSERT INTO my_table values (generate_series(1,100000), =mod 10 of whatever was generated in the previous column)

【问题讨论】:

    标签: java sql postgresql sql-insert series


    【解决方案1】:

    这是你想要的吗?

    insert into t (b)
        select val % 10
        from generate_series(1, 10000, 1) gs(val)
        order by gs.val;
    

    Here 是一个 dbfiddle。

    【讨论】:

    • 我尝试了您对 generate_series(1,10) 所做的操作,它产生了如下内容: (3,2) , (4,3) (11, 8)... 不知道它是如何实现的按该顺序生成它们。假设我们正在做 mod 3,我希望插入生成所有列 a,并将所有列 b 设置为列 a 中生成的任何内容的 mod3,例如(0, 0) (1, 1) , (2, 2) (3,0) (4, 1) (5, 2) ...
    • @Hadi 。 . .我希望这些值是有序的,即使没有order by。但包含order by 更合适。
    【解决方案2】:

    您的创建表 t(a 序列,b 整数)。这将是一个名为 t_a_seq 的序列。您可以使用 nextval, currval 为该序列“覆盖”列 a 的自动生成。所以:

    create table t( a serial, b integer);
    -- generates sequence t_a_seq;
    
    insert into t (a,b)
        select nextval('t_a_seq'::regclass), currval('t_a_seq'::regclass) % 3
        from generate_series(1, 10000, 1) gs(val)
     ;
    

    不强烈推荐,但它可以完成工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 2015-06-17
      • 1970-01-01
      相关资源
      最近更新 更多