Copie os dados de uma coluna para outra coluna (que está em uma tabela diferente)

88

Quero copiar dados de uma coluna para outra coluna de outra tabela. Como eu posso fazer isso?

Tentei o seguinte:

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

mas não funcionou.

Desejo copiar a coluna "BusinessCountry" da tabela de contatos para a coluna "CountryName" da tabela tblindiantime.

Amit Patil
fonte
1
Para copiar colunas de uma tabela para outra, você precisa de algum tipo de relação entre as tabelas. As duas tabelas têm um ID comum?
mdma
1
Qual banco de dados e versão você está usando?
Mark Byers

Respostas:

88

No SQL Server 2008, você pode usar uma atualização de várias tabelas da seguinte maneira:

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

Você precisa de uma condição de junção para especificar qual linha deve ser atualizada.

Se a tabela de destino estiver vazia, você deve usar um INSERT em vez disso:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts
Mark Byers
fonte
1
Olá, obrigado pelo seu representante, mas ele está mostrando o seguinte erro Não é possível inserir o valor NULL na coluna 'IndianTime', tabela 'tqms.dbo.tblindiantime'; coluna não permite nulos. INSERT falha. A instrução foi encerrada.
Amit Patil
2
@AmitPatil - Eu sei que isso é antigo, mas pode ajudar alguém como você. Use ISNULL (contacts.BusinessCountry, '') em vez de apenas contacts.BusinessCountry e deverá resolver o seu problema. Basicamente, estamos substituindo null por uma string vazia.
Ankur-m
1
Como este exemplo não mostra o que é uma "condição de junção" pode ser, veja também a resposta de Michael Pakhantsov, e a resposta de cedrikdlb , e a resposta de Parveen a uma pergunta semelhante, onde duas colunas devem ser comparadas para escolher a linha correta .
Toolmaker Steve
148

Aqui a consulta:

Mesma mesa:

UPDATE table_name 
SET column1 = column2

Tabela Diferente:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );
Nalan Madheswaran
fonte
13
Está errado no contexto da pergunta, em que o autor da pergunta envolve especificamente 2 tabelas.
bPratik
2
Funciona para o mysql no caso de colunas estarem relacionadas à mesma tabela.
Satish Pandey,
11
No entanto, isto resolve o meu problema, e cheguei aqui através do título da pergunta, que provavelmente corresponde mais a esta resposta do que aos detalhes da pergunta!
Rob Grant de
6
Essa resposta responde ao título da pergunta, e não à própria pergunta. Mesmo assim, achei isso útil para o que estava tentando fazer.
wizard07KSU
1
esta é uma resposta excelente; ajudou-me a copiar apenas uma coluna do meu backup para a tabela principal!
Zelter Ady de
22

Tabela2.Coluna2 => Tabela1.Coluna1

Sei que essa pergunta é antiga, mas a resposta aceita não funcionou para mim. Para futuros googlers, isto funcionou para mim:

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

Através do qual:

  • tabela1 = tabela que contém a coluna que precisa ser atualizada
  • tabela2 = tabela que possui a coluna com os dados
  • coluna1 = coluna em branco que precisa dos dados da coluna2 (isso está na tabela1)
  • coluna2 = coluna que contém os dados (que está na tabela2)
Kenny Grage
fonte
1
Funcionou para mim - mas é igual ao anterior, resposta por[Michael Pakhantsov]
Don Cheadle
3
Você está certo, @mmcra, que agora é igual à resposta acima. Porém, não era o mesmo na época em que escrevi este comentário. Você notará que ele foi editado em setembro e os erros foram corrigidos. Eu havia escrito este comentário em junho.
Kenny Grage
16

Espero que você tenha o campo-chave em duas tabelas.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )
Michael Pakhantsov
fonte
1
isso é válido apenas se você substituir um campo por um outro campo ele vai lançar ORA-01427: single-row subquery returns more than one rowse o select retornar mais de uma linha, e se eu quiser selecionar mais de uma linha e atualizar a coluna com esses valores?
Muhammad Ramahy
3
@Muhammad Ramahy, você tem uma tabela aninhada na coluna de atualização? na subconsulta retorna várias linhas, então Key não é PrimaryKey para a tabela de contatos. Se você tiver uma chave primária composta, você só precisa de condições para a cláusula WHERE.
Michael Pakhantsov,
1
Não entendo o que você quer dizer com "Espero que o campo-chave seja duas tabelas"
Marco Lackovic
2
@Krige - Ele aparentemente quer dizer "Se as duas tabelas tiverem um campo Chave compartilhada para identificar qual linha de cada tabela corresponde à linha da outra tabela" . Do contrário, você precisa mudar o que vem depois WHERE. Por exemplo, se tblindiantime tem campo ContactID, que é o IDda linha na contactsqual pertence a cada linha em tblindiantime, você deve usar WHERE tblindiantime.ContactID=contacts.ID. Veja a resposta de cedrikdlb para outra variação.
Toolmaker Steve
8

A resposta de uma pergunta semelhante funcionou mais corretamente para mim do que a resposta selecionada para esta pergunta (por Mark Byers). Usando a resposta de Mark, minha coluna atualizada obteve o mesmo valor em todas as linhas (talvez o valor da primeira linha que correspondeu à junção). Usando a resposta de ParveenaArora do outro tópico, atualizou a coluna com os valores corretos.

Transformando a solução de Parveena para usar os nomes das tabelas e colunas desta questão, a consulta seria a seguinte (onde eu suponho que as tabelas estão relacionadas por meio de tblindiantime.contact_id):

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

Eu acho que todas as respostas anteriores estão corretas, este código abaixo é muito válido especialmente se você tiver que atualizar várias linhas de uma vez, nota: é 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;

Eu gostaria que isso pudesse ajudar.

Muhammad Ramahy
fonte
2

Agora é mais fácil com o Management Studio 2016.

Usando o SQL Server Management Studio

Para copiar dados de uma tabela para outra

1.Abra a tabela com as colunas que deseja copiar e a que deseja copiar clicando com o botão direito do mouse nas tabelas e clicando em Design .

2.Clique na guia da tabela com as colunas que deseja copiar e selecione essas colunas.

3. No menu Editar , clique em Copiar .

4. Abra uma nova janela do Editor de Consultas.

5. Clique com o botão direito do mouse no Editor de Consultas e clique em Design Query no Editor .

6. Na caixa de diálogo Adicionar Tabela , selecione a tabela de origem e destino, clique em Adicionar e feche a caixa de diálogo Adicionar Tabela .

7. Clique com o botão direito em uma área aberta do Editor de Consultas, aponte para Tipo de Alteração e clique em Inserir Resultados .

8. Na caixa de diálogo Escolher Tabela de Destino para Inserir Resultados , selecione a tabela de destino.

9.Na parte superior do Query Designer, clique na coluna de origem na tabela de origem.

10.O Query Designer criou agora uma consulta INSERT. Clique em OK para colocar a consulta na janela original do Editor de Consultas.

11. Execute a consulta para inserir os dados da tabela de origem na tabela de destino.

Para obter mais informações https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine

Coder
fonte
1

Isso pode ser resolvido usando um atributo diferente.

  • Use o evento de clique de controle da célula.
  • Selecione o valor da coluna que você transpõe para outra coluna.
  • envie o valor selecionado para a outra caixa de texto ou nível o que for conveniente e um botão complementar para modificar a propriedade selecionada.
  • atualize toda a pilha do banco de dados e faça um algoritmo com consulta sql para superar este para transpor para a outra coluna.
user5204562
fonte