在Vertica数据库中复制选定的行

时间:2016-01-05 08:40:34

标签: sql vertica

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

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

但是,此语句复制了所有存在的行,其中x ="某些"这就像将所选行乘以2一样。

我想要的是通过计数器控制要复制的行数。在Vertica中是否有任何功能/程序?

现在我已经做了很多事情:

  1. 研究了功能(我已经理解了这一点,但我不能用这个来解决这个问题)。
  2. 研究过程(已经学过,但无法理解如何制作该bash文件)。
  3. 了解到vertica中没有for-while循环。
  4. 任何人都可以帮我解决这个问题吗?我希望我很清楚。如果我错过了什么,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

尝试如下:

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)

如果符合您的要求,请告知我们。

可以通过现在为5的限制条款来控制副本数量,您可以根据自己的意愿进行更改。但您也可以从其他表中选择哪些行还有更多行。如果源表具有<然后它会失败。