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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2014, 09:04   #1
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию Копирование данных из одной таблицы в другую

Доброе утро, Уважаемые Форумчане!
Есть 2 идентичные по структуре таблицы А (столбцы: name, surname, number) и В (столбцы: name, surname, number).
Подскажите, пожалуйста, как скопировать строку из таблицы А в таблицу В, где ячейка number совпадает в обоих таблицах.
Т.е. копируется только та строка, где number одинаковы!
Заранее спасибо!
Streb вне форума Ответить с цитированием
Старый 12.03.2014, 09:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

number - это уникальный ключ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.03.2014, 09:27   #3
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Number не является уникальным ключом!
Streb вне форума Ответить с цитированием
Старый 12.03.2014, 09:35   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если запросом, то по заданному значению number найти все строки в таблице A с таким же значением number и добавить такие же в таблицу B. Это типа перевода вашей хотелки. Максимально что понял. Странное устройство таблиц
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.03.2014, 09:41   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тогда я вообще не понимаю задачу.
Таблица A
Код:
name        surname  number
Иванов       Олег       2
Бендер       Остап      1
Безенчук     Иван       2
Воробьянинов Ипполит    1
Пупкин       Вася       7

Таблица B
Код:
name        surname  number
Кабаева       Алина     1
Сидорова      Ольга     2
Людоедка      Эллочка   2
приведите таблицу B ПОСЛЕ копирования (желательно с комментариями, почему так)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.03.2014, 09:53   #6
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Таблица А
Код:
name        surname  number
Кабаева       Алина     100
Сидорова      Ольга     200
Людоедка      Эллочка   300
Таблица Б
Код:
name        surname  number
Иванов      Иван     100
Артемов      Артем     100000
Соловьев      Виктор   100000000000
Итог:
Код:
name        surname  number
Кабаева       Алина     100
Артемов      Артем     100000
Соловьев      Виктор   100000000000

Т.к. столбик number имеет одно значение в 2 таблицах, то строка из таблицы А копируется в таблицу В

На языке SQL делается так

Код:
INSERT INTO B SELECT * FROM A Where number = number

Последний раз редактировалось Streb; 12.03.2014 в 10:00.
Streb вне форума Ответить с цитированием
Старый 12.03.2014, 10:12   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Number не является уникальным ключом!
Означает, что в каждой таблице NUMBER не уникально. Что делать в такой ситуации
Таблица А
Код:
name        surname  number
Кабаева       Алина     100
Ппппппп       Алина     100
Сссссссс       Алина     100
Сидорова      Ольга     200
Людоедка      Эллочка   300
Таблица Б
Код:
name        surname  number
Иванов      Иван     100
Дддддд      Иван     100
Артемов      Артем     100000
Соловьев      Виктор   100000000000
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.03.2014, 10:35   #8
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Все, понял! Сделал number уникальным полем. Теперь как решить проблему?
Streb вне форума Ответить с цитированием
Старый 12.03.2014, 10:57   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Для MS SQL сделал бы так, для других СУБД такой запрос может не пройти
Код:
UPDATE TableB
  SET Name=A.Name,Surname=A.Surname
  FROM TableB B,TableA A
  WHERE B.Number=A.Number
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.03.2014, 10:58   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
INSERT INTO B SELECT * FROM A Where number = number
number =number всегда!
INSERT INTO B SELECT * FROM A
делает тоже самое

надо же добавляем (insert) если нет и заменяем (update) если есть
Код:
insert into b 
select * from a where number is not in (select number from b )

insert into b 
select * from a where not exists (select * from b where a.number =b.number )

update b set name=a.name, surname=a.surname
from a where b.number =a.number
добавить только number и только новые
Код:
insert into b (number)
select number from a where number not in (select number from b )
заменить все (включая уже добавленнные)
Код:
update b set name=a.name, surname=a.surname
from a where b.number =a.number
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование данных из одной таблицы в другую Streb БД в Delphi 12 24.02.2014 14:51
MS SQL SERVER 2005 копирование таблицы из ОДНОЙ БД В другую или перенести все строки из одной таблицы в другую reihtmonbern БД в Delphi 4 17.07.2012 23:25
Копирование данных из одной таблицы в другую Arega Microsoft Office Access 0 11.07.2012 17:01
Копирование части данных из одной таблицы в другую SAM77777 Microsoft Office Excel 3 12.04.2011 19:24
Копирование данных из одной таблицы в другую! фЁдОр БД в Delphi 18 06.01.2008 19:27