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

时间:2018-10-07 08:14:28

标签: mysql sql database

所以我有一个SQL数据库,我想复制名为“ searches”的表中的所有行,这些行在名为“ search_url”的列中有单词“ google”。该表中的记录超过300,000,因此我不想重复所有记录,只希望在名为“ search_url”的列中包含“ google”的记录重复。

新行的ID应该自动递增,其余所有列必须相同,除了名为“ search_url”的列(其中“ 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

2 个答案:

答案 0 :(得分:0)

这是逐步的。按照此过程进行操作,以免最终不会插入大量不良数据。

1)选择所需的行,但自动递增主键ID除外-mysql将自行管理:

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

如果您不希望所有行,请使用where子句

2)您可以根据需要修改数据。在这里,我们使用字符串替换功能将google更改为yahoo:

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

检查它看起来是否很好。(您说过您想更改 google-> search.yahoo ,但严格来说,示例数据需要 www.google-> search.yahoo -在插入之前检查数据

3)然后在其上方添加一个插入内容,以插入表格中

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列,然后尝试插入技术上将是一堆已经存在的值

答案 1 :(得分:0)

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

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

希望它对您有用。