Vertica 数据库中的重复选定行

Duplicate selected row in Vertica Database

有人要求我复制 table 中的特定行。为此,我使用了一个简单的 SQL 语句:

insert into xyz_tablename(x,y) select * from xyz_tablename where x = "something";

但是,此语句会复制 x = "something" 所在的所有行,这就像将所选行乘以 2。

我想要的是通过计数器来控制要复制的行数。在 Vertica 中有任何 function/procedure 吗?

现在我做了什么:

  1. 研究了函数(我明白了,但是我不能用它来解决这个问题)。
  2. 学习了程序(学习了,但不明白如何制作那个bash文件)。
  3. 了解到vertica中没有for-while循环。

谁能帮我解决这个问题?我希望我清楚。如果我遗漏了什么,请告诉我。提前致谢。

尝试如下:

create table mystore.xyz_tablename(
    x varchar (10)
    ,y INT
    )
    ;

INSERT INTO mystore.xyz_tablename VALUES('abc' ,1);
INSERT INTO mystore.xyz_tablename VALUES('abc' ,2);
INSERT INTO mystore.xyz_tablename VALUES('abc' ,3);
INSERT INTO mystore.xyz_tablename VALUES('abc' ,4);
INSERT INTO mystore.xyz_tablename VALUES('abc' ,5);
INSERT INTO mystore.xyz_tablename VALUES('abc' ,6);
INSERT INTO mystore.xyz_tablename VALUES('abc' ,7);
INSERT INTO mystore.xyz_tablename VALUES('abc' ,8);

select * from mystore.xyz_tablename;

mystore_owner=>     select * from mystore.xyz_tablename;
  x  | y 
-----+---
 abc | 1
 abc | 2
 abc | 3
 abc | 4
 abc | 5
 abc | 6
 abc | 7
 abc | 8
(8 rows)

INSERT INTO mystore.xyz_tablename(x,y) 
SELECT a.* 
FROM (SELECT * from mystore.xyz_tablename where y = 8 LIMIT 1) a 
INNER JOIN (SELECT y FROM mystore.xyz_tablename LIMIT 5) b 
ON (1=1)
;

 OUTPUT 
--------
      5
(1 row)


mystore_owner=> select * from mystore.xyz_tablename;
  x  | y 
-----+---
 abc | 1
 abc | 2
 abc | 3
 abc | 4
 abc | 5
 abc | 6
 abc | 7
 abc | 8
 abc | 8
 abc | 8
 abc | 8
 abc | 8
 abc | 8
(13 rows)

让我们知道这是否符合您的要求。

副本的数量可以通过limit条款来控制,现在是5,你可以根据自己的意愿改变。但是您可以 select 来自其他 table 也有更多行。如果源 table 有 < than 子句,那么它将失败。