如何复制sql数据库表中的所有行并更改其中一列中的数据?

b0zn9rqh  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(501)

因此,我有一个sql数据库,我想复制一个名为“searches”的表中的所有行,这些行在名为“search\uurl”的列中有“google”一词。这个表中的记录超过300000条,所以我不想全部复制,只想复制那些在“search\u url”列中有“google”的记录。
新行的id应该自动递增,所有其他列必须相同,除了名为“search\uurl”的列,其中“google”必须变成“search.yahoo”
我的sql不是很好,我会感谢所有的帮助,我可以得到!谢谢:)
编辑:
样本数据:

ID SEARCH_URL                                SEARCHABLE_ID SEARCHABLE_TYPE
1  https://www.google.com/search?q=camping   1             App\News
2  https://www.google.com/search?q=hiking    2             App\News

所以我想在复制之后变成:

ID SEARCH_URL                                SEARCHABLE_ID SEARCHABLE_TYPE
1  https://www.google.com/search?q=camping   1             App\News
2  https://www.google.com/search?q=hiking    2             App\News
3  https://search.yahoo.com/?q=camping       1             App\News
4  https://search.yahoo.com/?q=hiking        2             App\News
pqwbnv8z

pqwbnv8z1#

这是一个循序渐进的步骤。遵循这个过程,这样就不会插入大量的坏数据。
1) 选择所需的行,但自动增量主键id-mysql将自行管理:

SELECT SEARCH_URL, SEARCHABLE_ID, SEARCHABLE_TYPE FROM TABLE --where .. ?

如果不需要所有行,请使用where子句
2) 您可以根据自己的意愿修改数据。这里我们使用string replace函数将google改为yahoo:

SELECT REPLACE(SEARCH_URL, 'google', 'search.yahoo'), SEARCHABLE_ID, SEARCHABLE_TYPE FROM TABLE

检查它是否好看(你说你想改变google->search.yahoo,但严格来说,你的例子需要数据www.google ->search.yahoo)-在插入数据之前检查数据
3) 然后在上面添加一个insert,插入到您的表中

INSERT INTO TABLE(SEARCH_URL, SEARCHABLE_ID, SEARCHABLE_TYPE)
SELECT REPLACE(SEARCH_URL, 'google', 'search.yahoo'), SEARCHABLE_ID, SEARCHABLE_TYPE FROM TABLE

您需要指定要插入的完整列集,并且必须指定与所选相同的插入列数。
如果有自动递增的主键,则不能执行 insert into table select * from table 因为这将选择id列,然后尝试插入一组已经存在的值

vc9ivgsu

vc9ivgsu2#

请使用以下查询获取所需的输出:

INSERT INTO searches(search_url, searchable_id,searchable_type)
SELECT REPLACE(search_url, 'google', 'search.yahoo'), searchable_id,searchable_type FROM searches;

希望对你有用。

相关问题