所以我有一个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
答案 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;
希望它对您有用。