有人可以解释(或指向正确的方向)如何将多行从一个表移动到另一个表,并根据设定的标准从原始表中删除该行?
我理解
INSERT INTO table2 SELECT * FROM table1
将数据从一个表复制到另一个表但我需要删除原始表。原因是有人建议加快对表的查询,我应该将所有冗余数据(已结束,过期,超过3个月的产品)从主表移动到另一个表。
有一些背景知识,我有一个包含产品的表,有些产品已经过期但产品仍然需要访问。大约有50,000种产品已经过期,2,000种产品已经过期。有一个状态列(int 1 = active,2 = expired等)来确定在前端显示的内容。
我想这篇文章有两个问题:
非常感谢!
答案 0 :(得分:6)
INSERT INTO table2(column_name1,column_name2)SELECT column_name1, column_name2 FROM table 1 WHERE(where where子句)
DELETE FROM table1 WHERE(where where子句)
答案 1 :(得分:4)
表中的50,000条记录确实不是那么多。如果您遇到性能问题,我会查看您的查询和索引,以帮助加快性能。而且由于仍然需要访问那些过期的记录,因此维护多个表可能会更加困难。
但是,要按照您的要求将数据从一个表移动到另一个表,您只需要运行2个不同的语句。假设您要移动非活动产品:
INSERT INTO ProductsBackup SELECT * FROM Products WHERE Status <> 1
DELETE FROM Products WHERE WHERE Status <> 1
如果您的列上有Identities,则最好指定列名称。但假设ProductId是Identity,那么请小心将它们移到另一个表中,因为您可能不希望丢失原始ID,因为它可能指向其他表。
祝你好运。