Как продублировать все строки в таблице базы данных SQL и изменить данные в одном из столбцов? - PullRequest
0 голосов
/ 07 октября 2018

Итак, у меня есть база данных SQL, и я хочу продублировать все строки таблицы с именем "search", в которой есть слово "google" в столбце с именем "search_url".Записи в этой таблице более 300 000, поэтому я не хочу дублировать их все, только те, которые имеют "google" в столбце с именем "search_url".

Идентификатор новых строк должен автоматически увеличиваться, и все остальные столбцы должны быть одинаковыми, за исключением столбца с именем «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 голосов
/ 07 октября 2018

Пожалуйста, используйте запрос ниже, чтобы получить желаемый результат:

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

Надеюсь, он работает для вас.

0 голосов
/ 07 октября 2018

Вот шаг за шагом.Следуйте этому процессу, чтобы не вставлять загрузку неверных данных.

1) Выберите нужные вам строки, кроме идентификатора первичного ключа автоинкремента - 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, а затем попытается вставить то, что технически будет набором уже существующих значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...