Как вставить поле, содержащее измененное значение строки - PullRequest
0 голосов
/ 22 марта 2019

У меня есть эта таблица:

CREATE TABLE `new_random` (
  `i_domain` varchar(500) DEFAULT NULL,
  `i_domain_no_http` varchar(500) DEFAULT NULL,
  UNIQUE KEY `i_domain_UNIQUE` (`i_domain`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Я создал поле i_domain_no_http, используя alter table. Это новый столбец (без значения, там изначально задано значение NULL), куда я хочу вставить точные значения i_domain, но после их изменения и удаления префикса http://. /

Я сделал запрос:

insert into `myscheme`.`new_random` (`new_random`.`i_domain_no_http`)
select substring_index(`new_random`.`i_domain`,'http://',-1)
from `myscheme`.`new_random`;

Пример, таблица должна выглядеть так:

i_domain       | i_domain_no_http
------------------------------------
http://11.com  | 11.com
https://22.com | 22.com

Но я получаю эту ошибку:

i_domain       | i_domain_no_http
------------------------------------
http://11.com  | 
https://22.com | 
NULL           | 11.com
NULL           | 22.com

'i_domain' должен быть первичным ключом, а не NULL, но мне пришлось удалить NN и PK, чтобы избежать ошибки:

Error Code: 1364. Field 'i_domain' doesn't have a default value

В чем проблема? Как это решить?

1 Ответ

0 голосов
/ 22 марта 2019

Требуется запрос UPDATE:

UPDATE myscheme.new_random 
SET i_domain_no_http = SUBSTRING_INDEX(new_random.i_domain,'://',-1)

Вывод:

i_domain        i_domain_no_http
http://11.com   11.com
https://22.com  22.com

Демонстрация на dbfiddle

...