Скопируйте данные из одного столбца в другой столбец (который находится в другой таблице)

89

Я хочу скопировать данные из одного столбца в другой столбец другой таблицы. Как я могу это сделать?

Я пробовал следующее:

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

но это не сработало.

Я хочу скопировать столбец «BusinessCountry» таблицы контактов в столбец «CountryName» таблицы tblindiantime.

Амит Патил
источник
1
Чтобы скопировать столбцы из одной таблицы в другую, вам нужна какая-то связь между таблицами. У двух таблиц общий идентификатор?
mdma
1
Какую базу данных и версию вы используете?
Марк Байерс

Ответы:

89

В 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»; столбец не допускает значений NULL. INSERT не работает. Заявление было прекращено.
Амит Патил,
2
@AmitPatil - я знаю, что это старое, но может помочь кому-то вроде вас. Используйте ISNULL (contacts.BusinessCountry, '') вместо просто contacts.BusinessCountry, и это должно решить вашу проблему. По сути, мы заменяем null пустой строкой.
Анкур-м
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 03
2
Его работа для mysql в случае, если столбцы относятся к той же таблице.
Сатиш Панди
11
Однако это решает мою проблему, и я попал сюда через заголовок вопроса, который, вероятно, больше соответствует этому ответу, чем деталям в вопросе!
Роб Грант
6
Этот ответ отвечает на название вопроса, а не на сам вопрос. Тем не менее, я нашел это полезным для того, что пытался сделать.
wizard07KSU
1
это отличный ответ; это помогло мне скопировать только один столбец из моей резервной копии в основную таблицу!
Zelter Ady
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выбрано, если выбор вернет более одной строки, что, если я хочу выбрать более одной строки и обновить столбец с этими значениями?
Мухаммад Рамахи
3
@Muhammad Ramahy, у вас есть вложенная таблица в столбце обновления? в подзапросе возвращает несколько строк, тогда Key не является PrimaryKey для таблицы контактов. Если у вас есть составной первичный ключ, вам просто нужны условия для предложения WHERE.
Михаил Паханцов 07
1
Я не понимаю, что вы имеете в виду, говоря «Надеюсь, у вас есть ключевое поле - две таблицы»
Марко Лацкович
2
@Krige - он, по-видимому, имеет в виду: «Если две таблицы имеют общее поле Key, чтобы определить, какая строка каждой таблицы соответствует строке другой таблицы» . Если вы этого не сделаете, то вам нужно изменить то, что будет после WHERE. Например, если у tblindiantime есть поле ContactID, которое является IDстрокой, contactsкоторой принадлежит каждая строка в tblindiantime, тогда вы должны использовать WHERE tblindiantime.ContactID=contacts.ID. См . Ответ cedrikdlb для другого варианта.
ToolmakerSteve
8

Ответ на аналогичный вопрос сработал для меня более правильно, чем выбранный ответ на этот вопрос (Марк Байерс). Используя ответ Марка, мой обновленный столбец получил одинаковое значение во всех строках (возможно, значение из первой строки, которая соответствует соединению). Использование ответа ParveenaArora из другого потока обновило столбец с правильными значениями.

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

UPDATE tblindiantime
SET CountryName = contacts.BusinessCountry
FROM contacts
WHERE tblindiantime.contact_id = contacts.id;
cedricdlb
источник
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

С Management Studio 2016 стало проще.

Использование SQL Server Management Studio

Чтобы скопировать данные из одной таблицы в другую

1. Откройте таблицу со столбцами, которые вы хотите скопировать, и ту, в которую вы хотите скопировать, щелкнув таблицы правой кнопкой мыши и выбрав « Дизайн» .

2. Щелкните вкладку таблицы со столбцами, которые вы хотите скопировать, и выберите эти столбцы.

3. В меню « Правка» нажмите « Копировать» .

4. Откройте новое окно редактора запросов.

5. Щелкните правой кнопкой мыши Редактор запросов, а затем выберите Создать запрос в редакторе .

6. В диалоговом окне « Добавить таблицу » выберите исходную и целевую таблицы, нажмите « Добавить» и закройте диалоговое окно « Добавить таблицу ».

7. Щелкните правой кнопкой мыши открытую область редактора запросов, выберите пункт « Изменить тип» и нажмите « Вставить результаты» .

8. В диалоговом окне « Выбор целевой таблицы для вставки результатов» выберите целевую таблицу.

9. В верхней части конструктора запросов щелкните исходный столбец в исходной таблице.

10. Конструктор запросов теперь создал запрос INSERT. Нажмите OK, чтобы поместить запрос в исходное окно редактора запросов.

11. Выполните запрос, чтобы вставить данные из исходной таблицы в целевую таблицу.

Для получения дополнительной информации https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine

Кодер
источник
1

Это можно решить, используя другой атрибут.

  • Используйте событие щелчка элемента управления ячейкой.
  • Выберите значение столбца, которое вы переносите в другой столбец.
  • отправьте выбранное значение в другое текстовое поле или уровень, как вам удобно, и дополнительную кнопку для изменения выбранного свойства.
  • обновить весь стек в базе данных и создать алгоритм с запросом sql, чтобы преодолеть этот, чтобы перенести его в другой столбец.
user5204562
источник