Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Имеется таблица с полями `Фамилия`, `Имя`.
Требуется создать в ней поле `Отчество` и заполнить его значениями, соответствующими уже имеющимся значениям строк (фамилия, имя), которых несколько сотен.
Как составить запрос?
P.S. Если такой вопрос обсуждался - извиняюсь. Не знаю, как сформулировать соответствующий поиск.
Неактивен
По первому пункту смотрите ALTER TABLE `table` ADD COLUMN. По второму не понятно, что значит "соответствующими значениями". Можно заполнить, например, соответствующими фамилиями и именами через пробел, чтобы не переспрашивать.
Неактивен
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 |
+---------+-------+-----------+
А мне требуется, чтобы отчества заполняли поле с первой строки, продолжая уже имеющиеся строки с фамилией и именем.
Неактивен
чтобы заполнить все три поля нужен запрос
Активен
Римович написал:
Требуется добавить поле 'p', которое затем заполнить значениями отчеств.
Задача становится еще более странной, чем я предположил в начале.
Можете обновлять по одной записи, используя WHERE `p` IS NULL LIMIT 1, раз не разжились нормальным идентификатором
Неактивен
да, ID целочисленного явно не хватает
Активен
Да, если бы были идентификаторы, можно было использовать INSERT ... ON DUPLICATE KEY UPDATE
Со значениями (1, 'Ivanovich'), (2, 'Petrovich'), etc.
Неактивен
По одной записи я, конечно, могу обновлять... Но, как я указал в первичном условии, записей сотни.
Простого решения, понимаю, нет. Конечно, в БД записи не упорядочены, но выводятся же в определённом постоянном порядке, а не рандомно при каждом обращении...
Полагал, что используя логику этого порядка, внесённые значения дополнительного столбца могли бы размещаться в этом же порядке напротив уже внесённых в строки значений...
Отредактированно Римович (25.01.2023 23:52:47)
Неактивен
Нету понимания, как Вы хотите заполнять поле Отчество, имея Имя и фамилию. Эти данные ведь надо откуда-то брать.
Активен
deadka написал:
Нету понимания, как Вы хотите заполнять поле Отчество, имея Имя и фамилию. Эти данные ведь надо откуда-то брать.
Какие данные? Отчества? Я их вношу в запрос последовательно, в соответствии с порядком строк Фамилия_Имя, выводимых SELECT * FROM Peopl.
Далее - см. предыдущее сообщение. )))
Как вариант: добавить поле id INT PRIMARY KEY AUTO_INCREMENT, а потом
estic написал:
...использовать INSERT ... ON DUPLICATE KEY UPDATE
Со значениями (1, 'Ivanovich'), (2, 'Petrovich'), etc.
?
Неактивен
Римович написал:
По одной записи я, конечно, могу обновлять... Но, как я указал в первичном условии, записей сотни.
Простого решения, понимаю, нет. Конечно, в БД записи не упорядочены, но выводятся же в определённом постоянном порядке, а не рандомно при каждом обращении...
Полагал, что используя логику этого порядка, внесённые значения дополнительного столбца могли бы размещаться в этом же порядке напротив уже внесённых в строки значений...
Вот тут ещё товарищи на мой вопрос:
"По "классике", записи в таблице не упорядоченны, верно? Но есть некий принцип, по которому они выводятся при просмотре таблицы в определённой последовательности, если такая последовательность не задана жёстко запросом.
Или следует ожидать, что последовательность расположения строк будет рандомно меняться от раза к разу при вызове таблицы?"
меня просветили - если кому из начинающих интересно будет:
Gluck99: "Нет никакого принципа, смотрите стандарт SQL. На конкретной БД в определенной версии сервера и на конкретной машине последовательность может быть одной. В другой БД, на другой версии и на другом диске последовательность будет иной. Плюс есть внутренняя логика оптимизатора, который упорядочивает записи таким образом, каким считает нужным в конкретной ситуации.
Это не означает, что каждый раз выполняя SELECT, записи будут рандомно менять положение. Обычно (но необязательно) они остаются в том же порядке. Суть в том, что в других условиях порядок может быть другим. И опять-таки, он не рандомный, он сложно предсказуемый. И эта сложность (и ненужность гадания на кофейной гуще) создаёт некоторый эффект как бы рандомности."
Ludwig Valentin: "Если не id c автоинкрементом, то можно добавить столбец с последней датой.
Но если вставляется много записей в секунду, такой подход тоже не годится.
Поэтому - id с автоинкрементом."
Спасибо всем принявшим участие в обсуждении!
Неактивен
Если таблица InnoDB, то данные будут считываться и отдаваться согласно кластерному индексу, подряд то есть.
Но гарантий этого никто не даст. По стандарту sql - если нет order by, то порядок не гарантируется. точка.
Так что да, лучше целочисленный id ну или да, игрища с датой/временем. автоинкрементный id - универсальное решение.
Активен