SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.01.2023 17:56:48

Римович
Участник
Зарегистрирован: 25.01.2023
Сообщений: 15

Заполнение добавленного поля.

Здравствуйте!

Имеется таблица с полями `Фамилия`, `Имя`.
Требуется создать в ней поле `Отчество` и заполнить его значениями, соответствующими уже имеющимся значениям строк (фамилия, имя), которых несколько сотен.
Как составить запрос?

P.S. Если такой вопрос обсуждался - извиняюсь. Не знаю, как сформулировать соответствующий поиск.

Неактивен

 

#2 25.01.2023 18:39:04

estic
Завсегдатай
Зарегистрирован: 01.10.2022
Сообщений: 25

Re: Заполнение добавленного поля.

По первому пункту смотрите ALTER TABLE `table` ADD COLUMN. По второму не понятно, что значит "соответствующими значениями". Можно заполнить, например, соответствующими фамилиями и именами через пробел, чтобы не переспрашивать.

Неактивен

 

#3 25.01.2023 22:10:06

Римович
Участник
Зарегистрирован: 25.01.2023
Сообщений: 15

Re: Заполнение добавленного поля.

estic написал:

По первому пункту смотрите ALTER TABLE `table` ADD COLUMN. По второму не понятно, что значит "соответствующими значениями". Можно заполнить, например, соответствующими фамилиями и именами через пробел, чтобы не переспрашивать.

С созданием поля проблем нет - упомянул на тот случай, если при создании, вдруг, в моём случае требуется не стандартный запрос.
Есть таблица 'Peopl':
+---------+-------+
| ln      | fn    |
+---------+-------+
| Ivanov  | Ivan  |
| Petrov  | Petr  |
| Sidorov | Sidor |
+---------+-------+
Требуется добавить поле 'p', которое затем заполнить значениями отчеств.
Создаю поле, но затем, при выполнении следующего запроса:
mysql> INSERT Peopl (p)
    -> VALUES
    -> ('Ivanovich'),
    -> ('Petrovicn');
таблица принимает такой вид:
+---------+-------+-----------+
| ln      | fn    | p         |
+---------+-------+-----------+
| Ivanov  | Ivan  | NULL      |
| Petrov  | Petr  | NULL      |
| Sidorov | Sidor | NULL      |
| NULL    | NULL  | Ivanovich |
| NULL    | NULL  | Petrovicn |
+---------+-------+-----------+
А мне требуется, чтобы отчества заполняли поле с первой строки, продолжая уже имеющиеся строки с фамилией и именем.

Неактивен

 

#4 25.01.2023 22:13:44

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: Заполнение добавленного поля.

чтобы заполнить все три поля нужен запрос

insert into t(`In`, fn, p) values('Ivanov', 'Ivan', 'Ivanovich');


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 25.01.2023 22:58:40

estic
Завсегдатай
Зарегистрирован: 01.10.2022
Сообщений: 25

Re: Заполнение добавленного поля.

Римович написал:

Требуется добавить поле 'p', которое затем заполнить значениями отчеств.

Задача становится еще более странной, чем я предположил в начале.

Можете обновлять по одной записи, используя WHERE `p` IS NULL LIMIT 1, раз не разжились нормальным идентификатором smile

Неактивен

 

#6 25.01.2023 23:06:17

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: Заполнение добавленного поля.

да, ID целочисленного явно не хватает


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 25.01.2023 23:28:04

estic
Завсегдатай
Зарегистрирован: 01.10.2022
Сообщений: 25

Re: Заполнение добавленного поля.

Да, если бы были идентификаторы, можно было использовать INSERT ... ON DUPLICATE KEY UPDATE wink

Со значениями (1, 'Ivanovich'), (2, 'Petrovich'), etc.

Неактивен

 

#8 25.01.2023 23:51:07

Римович
Участник
Зарегистрирован: 25.01.2023
Сообщений: 15

Re: Заполнение добавленного поля.

По одной записи я, конечно, могу обновлять... Но, как я указал  в первичном условии, записей сотни.
Простого решения, понимаю, нет. Конечно, в БД записи не упорядочены, но выводятся же в определённом постоянном порядке, а не рандомно при каждом обращении...
Полагал, что используя логику этого порядка, внесённые значения дополнительного столбца могли бы размещаться в этом же порядке напротив уже внесённых в строки значений...

Отредактированно Римович (25.01.2023 23:52:47)

Неактивен

 

#9 25.01.2023 23:52:37

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: Заполнение добавленного поля.

Нету понимания, как Вы хотите заполнять поле Отчество, имея Имя и фамилию. Эти данные ведь надо откуда-то брать.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 26.01.2023 00:03:03

Римович
Участник
Зарегистрирован: 25.01.2023
Сообщений: 15

Re: Заполнение добавленного поля.

deadka написал:

Нету понимания, как Вы хотите заполнять поле Отчество, имея Имя и фамилию. Эти данные ведь надо откуда-то брать.

Какие данные? Отчества? Я их вношу в запрос последовательно, в соответствии с порядком строк Фамилия_Имя, выводимых SELECT * FROM Peopl.
Далее - см. предыдущее сообщение. )))
Как вариант: добавить поле id INT PRIMARY KEY AUTO_INCREMENT, а потом

estic написал:

...использовать INSERT ... ON DUPLICATE KEY UPDATE wink
Со значениями (1, 'Ivanovich'), (2, 'Petrovich'), etc.

?

Неактивен

 

#11 26.01.2023 12:16:30

Римович
Участник
Зарегистрирован: 25.01.2023
Сообщений: 15

Re: Заполнение добавленного поля.

Римович написал:

По одной записи я, конечно, могу обновлять... Но, как я указал  в первичном условии, записей сотни.
Простого решения, понимаю, нет. Конечно, в БД записи не упорядочены, но выводятся же в определённом постоянном порядке, а не рандомно при каждом обращении...
Полагал, что используя логику этого порядка, внесённые значения дополнительного столбца могли бы размещаться в этом же порядке напротив уже внесённых в строки значений...

Вот тут ещё товарищи на мой вопрос:

"По "классике", записи в таблице не упорядоченны, верно? Но есть некий принцип, по которому они выводятся при просмотре таблицы в определённой последовательности, если такая последовательность не задана жёстко запросом.
Или следует ожидать, что последовательность расположения строк будет рандомно меняться от раза к разу при вызове таблицы?"

меня просветили - если кому из начинающих интересно будет:

Gluck99: "Нет никакого принципа, смотрите стандарт SQL. На конкретной БД в определенной версии сервера и на конкретной машине последовательность может быть одной. В другой БД, на другой версии и на другом диске последовательность будет иной. Плюс есть внутренняя логика оптимизатора, который упорядочивает записи таким образом, каким считает нужным в конкретной ситуации.
Это не означает, что каждый раз выполняя SELECT, записи будут рандомно менять положение. Обычно (но необязательно) они остаются в том же порядке. Суть в том, что в других условиях порядок может быть другим. И опять-таки, он не рандомный, он сложно предсказуемый. И эта сложность (и ненужность гадания на кофейной гуще) создаёт некоторый эффект как бы рандомности."

Ludwig Valentin: "Если не id c автоинкрементом, то можно добавить столбец с последней датой.
Но если вставляется много записей в секунду, такой подход тоже не годится.
Поэтому - id с автоинкрементом."

Спасибо всем принявшим участие в обсуждении!

Неактивен

 

#12 26.01.2023 12:24:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: Заполнение добавленного поля.

Если таблица InnoDB, то данные будут считываться и отдаваться согласно кластерному индексу, подряд то есть.
Но гарантий этого никто не даст. По стандарту sql - если нет order by, то порядок не гарантируется. точка.
Так что да, лучше целочисленный id ну или да, игрища с датой/временем. автоинкрементный id - универсальное решение.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson