Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2021, 11:41   #1
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию Копирования из столбца в столбец.

Здравствуйте!
Тема копирования данных очень важна, чтобы не приходилось перебивать многие данные вручную из таблицы в таблицу.
В ходе изучения предмета возникла ситуация, на которую ответов в сети пока не нашел.
Ситуация такая:
1. Есть две одинаковые таблицы в разных базах данных.
2. У таблицы во второй базе данных вдруг оказался случайно удалён крайний столбец со всеми данными.
3. Надо скопировать идентичный удалённому столбец целиком с данными из такой же таблицы в первой базе.

Что получается на данный момент:
Создаётся одноимённый удалённому столбец в повреждённой таблице со значениями NULL.
Применяется формула-код:
Код:
INSERT INTO `db`.`table_to` (`a1_2`, `a2_2`, `a3_2`, `a4_2`)
SELECT `a1`, `a2`, `a3`, `a4`
FROM `db`.`table_from`;
Но данные записываются не с первой строки, как надо, чтобы таблица приобрела первоначальный вид, а после последней строки повреждённой таблицы.
Перечислять применённые условия и т.п. с использованием UPDATE смысла нет. Попыток было много.
Кто знает решение такой ситуации, подскажите пожалуйста.
KAMLS вне форума Ответить с цитированием
Старый 08.04.2021, 12:30   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
update t set errorcolumn =tsandart.errorcolumn
select ... from t // все таже "испорченная"
inner join tstandt // и хорошая 
                          on t.... =tstandart....   // как определить "совпадающие" строки таблиц
Цитата:
чтобы не приходилось перебивать многие данные вручную из таблицы в таблицу
для этого существует тема нормализация таблиц (и первая, вторая, третья и т.д. нормальные формы)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 08.04.2021, 12:33   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

1. должны быть какие-то уникальные идентификаторы в таблицах, чтоб можно было соответствие строк друг другу понимать
2. допустим он есть - id, обновляем значения столбца искомого, НЕ ДОБАВЛЯЕМ, а ОБНОВЛЯЕМ

Код:
UPDATE table_to SET deleted_col = (SELECT deleted_col  FROM table_from WHERE id = table_to.id)
ADSoft вне форума Ответить с цитированием
Старый 08.04.2021, 12:55   #4
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
1. должны быть какие-то уникальные идентификаторы в таблицах, чтоб можно было соответствие строк друг другу понимать
2. допустим он есть - id, обновляем значения столбца искомого, НЕ ДОБАВЛЯЕМ, а ОБНОВЛЯЕМ

Код:
Спасибо большое, этот код работает. Всё получилось.
KAMLS вне форума Ответить с цитированием
Старый 08.04.2021, 13:07   #5
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
допустим он есть - id, обновляем значения столбца искомого, НЕ ДОБАВЛЯЕМ, а ОБНОВЛЯЕМ
пытаюсь сделать эту операцию между двух баз данных.
Такой пишу код:
Код:
UPDATE cour SET buyer = (SELECT buyer FROM itproger.cour WHERE id = cour.id)
В ответ пишется: #1242 - Подзапрос возвращает более одной записи

Т.е. есть база данных magaz, где повреждённая таблица. А в базе данных itproger таблица не повреждённая.
Т.е. такой запрос МЕЖДУ баз данных не работает? Только ВНУТРИ одной базы?
KAMLS вне форума Ответить с цитированием
Старый 08.04.2021, 13:36   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Т.е. такой запрос МЕЖДУ баз данных не работает? Только ВНУТРИ одной базы?
работает, НО...
Цитата:
Подзапрос возвращает более одной записи
что-то у вас не то (в "правильной" таблице ЕСТЬ дубли значения поля id )

смотрите что вернет вам такой запрос
Код:
select id, count(*) nn from itproger.cour groUP by id order by 2 desc
если есть хотя бы одна строка со значениями поля nn >1, то ...
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 08.04.2021 в 14:09.
evg_m вне форума Ответить с цитированием
Старый 08.04.2021, 14:15   #7
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
если есть хотя бы одна строка со значениями поля nn >1, то ...
Вы для меня чрез чур по умному излагаете. Я пока такое не тяну)))
Вообще не понимаю, для чего делать сортировку по DESC (т.е. переворачивать) и какую роль в этой сортировке играет цифра 2...
Зачем функция подсчета количества значений столбца...
По ходу Вы просто угораете. А между тем люди уважают форум не за угар, а за то, что есть возможность обсудить вопрос и помочь решить задачу.
KAMLS вне форума Ответить с цитированием
Старый 08.04.2021, 14:22   #8
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

У вас подзапрос возвращает несколько строк. Вам дают запрос на вывод этих дублей для посмотреть глазами и проверить. А вы в ответ - угар...
FrosyaZZ вне форума Ответить с цитированием
Старый 08.04.2021, 14:40   #9
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
А вы в ответ - угар...
Я с самого начала сказал, что таблицы идентичные.
Просто скопированы в новую базу данных. В этой новой базе данных у одной таблицы потерялся столбец.
Ничего не помогало.
Потом мне показали пример кода, который работает между таблицами, если они в ОДНОЙ базе данных.
Код:
UPDATE table_to SET deleted_col = (SELECT deleted_col  FROM table_from WHERE id = table_to.id)
Код понятный и читаемый.
Но этот код не работает МЕЖДУ базами данных.
Я не понимаю тот код, который выводит дубли. Зачем он мне? Таблицы ИДЕНТИЧНЫ (за исключением удалённого столбца).
Этот код
Код:
select id, count(*) nn from itproger.cour groUP by id order by 2 desc
я не понимаю вообще.
Этот код выдаёт следующее:
(скрин)
Изображения
Тип файла: png Снимок22.PNG (45.1 Кб, 27 просмотров)
KAMLS вне форума Ответить с цитированием
Старый 08.04.2021, 15:00   #10
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
Я с самого начала сказал, что таблицы идентичные.
А это тут причем? Разговор о другом.

Цитата:
Сообщение от KAMLS Посмотреть сообщение
Но этот код не работает МЕЖДУ базами данных.
Работает. Но:
Код:
SELECT deleted_col  FROM table_from WHERE id = table_to.id
ВОЗВРАЩАЕТ НЕСКОЛЬКО СТРОК и СУБД не может НЕСКОЛЬКО СТРОК присвоить ОДНОЙ

Цитата:
Сообщение от KAMLS Посмотреть сообщение
я не понимаю вообще
А вы его пробовали читать? выбрать айди, кол-во из таблицы сгрупировать и отсортировать по 2 колонке в обратном порядке (ЧТОБЫ двойки были вверху).
FrosyaZZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставить в двумерный массив столбец после столбца с номером k VladimirML Помощь студентам 1 01.06.2015 16:52
В квадратной матрице A [ N ][ N ] определить номер столбца матрицы, имеющего наибольшую сумму элементов. Поменять этот столбец со Foxlin Помощь студентам 1 05.12.2013 23:10
Найти столбец где сумма элементов столбца наибольшая выше главной диагонали Max11 Помощь студентам 1 29.01.2013 14:59
Двумерный массив А. Если заданное число больше первой цифры столбца, то этот столбец удаляется. Комментировать листинг на Паскаль Altana Помощь студентам 0 29.05.2012 11:30