我被要求复制表格中的特定行。为此,我使用了一个简单的SQL语句:
insert into xyz_tablename(x,y) select * from xyz_tablename where x = "something";
但是,此语句复制了所有存在的行,其中x ="某些"这就像将所选行乘以2一样。
我想要的是通过计数器控制要复制的行数。在Vertica中是否有任何功能/程序?
现在我已经做了很多事情:
任何人都可以帮我解决这个问题吗?我希望我很清楚。如果我错过了什么,请告诉我。提前谢谢。
答案 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的限制条款来控制副本数量,您可以根据自己的意愿进行更改。但您也可以从其他表中选择哪些行还有更多行。如果源表具有<然后它会失败。