Копіювати дані з одного стовпця в інший стовпець (який знаходиться в іншій таблиці)


89

Я хочу скопіювати дані з одного стовпця в інший стовпець іншої таблиці. Як я можу це зробити?

Я спробував наступне:

Update tblindiantime Set CountryName =(Select contacts.BusinessCountry From contacts) 

але це не спрацювало.

Я хочу скопіювати стовпець таблиці контактів "BusinessCountry" у стовпець "CountryName" таблиці tblindiantime.


1
Щоб скопіювати стовпці з однієї таблиці в іншу, потрібен якийсь зв’язок між таблицями. Чи мають дві таблиці спільний ідентифікатор?
mdma

1
Яку базу даних та версію ви використовуєте?
Mark Byers

Відповіді:


88

У SQL Server 2008 ви можете використовувати оновлення для декількох таблиць наступним чином:

UPDATE tblindiantime 
SET tblindiantime.CountryName = contacts.BusinessCountry
FROM tblindiantime 
JOIN contacts
ON -- join condition here

Вам потрібна умова об’єднання, щоб вказати, який рядок слід оновити.

Якщо цільова таблиця в даний час порожня, то замість цього слід використати INSERT:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

1
Привіт, дякую за ур, але він показує мені наступну помилку. Неможливо вставити значення NULL у стовпець 'IndianTime', таблицю 'tqms.dbo.tblindiantime'; стовпець не допускає нулів. INSERT не вдається. Заява припинена.
Amit Patil

2
@AmitPatil - Я знаю, що це старе, але може допомогти комусь, як ти. Використовуйте ISNULL (contacts.BusinessCountry, ''), а не просто contacts.BusinessCountry, і це має вирішити вашу проблему. В основному ми замінюємо null порожнім рядком.
Ankur-m

1
Оскільки цей приклад не показує те , що «умова об'єднання» може бути, також побачити відповідь Майкла Pakhantsov, і відповідь cedrikdlb в , і відповідь Парвін на подібне питання, де дві колонки повинні бути зіставлені , щоб вибрати правильний рядок .
ToolmakerSteve

152

Ось запит:

Та сама таблиця:

UPDATE table_name 
SET column1 = column2

Інша таблиця:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );

13
Помилковий у контексті питання, де запитувач конкретно включає 2 таблиці.
bPratik

2
Його робота для mysql у випадку стовпців відноситься до тієї самої таблиці.
Сатіш Панді

11
Однак це вирішує мою проблему, і я потрапив сюди через заголовок питання, який, ймовірно, відповідає цій відповіді більше, ніж відповідає деталям у питанні!
Роб Грант

6
Ця відповідь відповідає на назву запитання, а не на саме питання. Тим не менш, я знайшов це корисним для того, що намагався зробити.
wizard07KSU

1
це відмінна відповідь; це допомогло мені скопіювати лише одну колонку зі своєї резервної копії в основну таблицю!
Зелтер Аді,

22

Таблиця2. Стовпець2 => Таблиця1. Стовпець1

Я усвідомлюю, що це питання старе, але прийнята відповідь мені не спрацювала. Для майбутніх гуглерів ось що мені вдалося:

UPDATE table1 
    SET column1 = (
        SELECT column2
        FROM table2
        WHERE table2.id = table1.id
    );

Чому:

  • table1 = таблиця, що містить стовпець, який потрібно оновити
  • table2 = таблиця, що містить стовпець з даними
  • column1 = порожній стовпець, який потребує даних із column2 (це в таблиці1)
  • column2 = стовпець, що містить дані (що є в таблиці2)

1
Працював для мене - але такий самий, як відповідь вище,[Michael Pakhantsov]
Дон Чідл

3
Ви маєте рацію, @mmcra, що тепер це те саме, що відповідь вище. Однак на той час я писав цей коментар не те саме. Ви помітите, що його було відредаговано у вересні, а помилки виправлено. Я написав цей коментар у червні.
Kenny Grage

16

Сподіваюся, у вас є ключове поле - це дві таблиці.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )

1
це дійсно, лише якщо замінити одне поле іншим полем, воно викине, ORA-01427: single-row subquery returns more than one rowякщо select поверне більше одного рядка, що робити, якщо я хочу вибрати більше одного рядка та оновити стовпець цими значеннями?
Мухаммед Рамахі

3
@ Мухаммад Рамахі, чи є у вас вкладена таблиця в стовпці оновлення? у підзапиті повертає кілька рядків, тоді ключ не є PrimaryKey для таблиці контактів. Якщо у вас є складений первинний ключ, вам просто потрібні умови для речення WHERE.
Михайло Паханцов

1
Я не розумію, що ви маєте на увазі під
словом

2
@Krige - Він, очевидно, означає "Якщо дві таблиці мають спільне поле Ключ, щоб визначити, який рядок кожної таблиці відповідає рядку іншої таблиці" . Якщо ні, тоді вам потрібно змінити те, що після WHERE. Наприклад, якщо у tblindiantime є поле ContactID, яке є IDрядком, до contactsякого належить кожен рядок у tblindiantime, тоді ви б використали WHERE tblindiantime.ContactID=contacts.ID. Дивіться відповідь cedrikdlb для іншої варіації.
ToolmakerSteve

8

Відповідь на подібне запитання для мене спрацювала більш правильно, ніж вибрана відповідь на це запитання (Марк Байерс). Використовуючи відповідь Марка, мій оновлений стовпець отримав однакове значення у всіх рядках (можливо, значення з першого рядка, що відповідає об’єднанню). За допомогою відповіді ParveenaArora з іншого потоку стовпець оновлено правильними значеннями.

Трансформуючи рішення Парвеени для використання імен таблиць та стовпців цього запиту, запит буде таким (де я припускаю, що таблиці пов’язані через tblindiantime.contact_id):

UPDATE tblindiantime
SET CountryName = contacts.BusinessCountry
FROM contacts
WHERE tblindiantime.contact_id = contacts.id;

3

Я думаю, що всі попередні відповіді правильні, цей наведений нижче код дуже дійсний, особливо якщо вам потрібно оновити кілька рядків одночасно, зверніть увагу: це PL / SQL

DECLARE
    CURSOR myCursor IS 
      Select contacts.BusinessCountry 
      From contacts c WHERE c.Key = t.Key;
    ---------------------------------------------------------------------
BEGIN
    FOR resultValue IN myCursor LOOP
        Update tblindiantime t
        Set CountryName=resultValue.BusinessCountry 
        where t.key=resultValue.key;
    END LOOP;
END;

Я хотів би, щоб це могло допомогти.


2

Тепер стало простіше зі студією управління 2016.

Використання SQL Server Management Studio

Для копіювання даних з однієї таблиці в іншу

1. Відкрийте таблицю зі стовпцями, які потрібно скопіювати, і ту, в яку потрібно скопіювати, клацнувши таблиці правою кнопкою миші, а потім клацніть Дизайн .

2. Клацніть вкладку таблиці зі стовпцями, які потрібно скопіювати, і виберіть ці стовпці.

3. У меню Редагування натисніть Копіювати .

4. Відкрийте нове вікно редактора запитів.

5. Клацніть правою кнопкою миші редактор запитів, а потім натисніть кнопку " Запит дизайну" в редакторі .

6. У діалоговому вікні Додати таблицю виберіть таблицю джерела та призначення, натисніть кнопку Додати , а потім закрийте діалогове вікно Додати таблицю .

7. Клацніть правою кнопкою миші відкриту область редактора запитів, наведіть курсор на Змінити тип , а потім натисніть Вставити результати .

8. У діалоговому вікні Вибір цільової таблиці для вставки результатів виберіть таблицю призначення.

9. У верхній частині конструктора запитів клацніть стовпець джерела у вихідній таблиці.

10. Query Designer тепер створив запит INSERT. Натисніть OK, щоб розмістити запит у вихідному вікні Query Editor.

11. Виконайте запит, щоб вставити дані з вихідної таблиці в цільову таблицю.

Для отримання додаткової інформації https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine


1

Це можна вирішити, використовуючи різні атрибути.

  • Скористайтеся подією кліку Control комірки.
  • Виберіть значення стовпця, яке ви транспонуєте до стовпчика пиляка.
  • надішліть вибране значення в інше текстове поле або вирівняйте те, що ви заповнюєте, зручною та додатковою кнопкою для зміни вибраної властивості.
  • оновіть весь стек у базі даних і створіть алгоритм із запитом sql, щоб подолати цей, щоб перенести його в інший стовпець.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.