Copier les données d'une colonne vers une autre colonne (qui se trouve dans une table différente)

89

Je souhaite copier des données d'une colonne vers une autre colonne d'une autre table. Comment puis je faire ça?

J'ai essayé ce qui suit:

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

Mais cela n'a pas fonctionné.

Je veux copier la colonne "BusinessCountry" de la table de contact dans la colonne "CountryName" de la table tblindiantime.

Amit Patil
la source
1
Pour copier des colonnes d'une table à une autre, vous avez besoin d'une sorte de relation entre les tables. Les deux tables ont-elles un identifiant commun?
mdma le
1
Quelle base de données et quelle version utilisez-vous?
Mark Byers

Réponses:

89

Dans SQL Server 2008, vous pouvez utiliser une mise à jour multi-table comme suit:

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

Vous avez besoin d'une condition de jointure pour spécifier la ligne à mettre à jour.

Si la table cible est actuellement vide, vous devez utiliser un INSERT à la place:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts
Mark Byers
la source
1
Salut merci pour votre représentant mais il me montre l'erreur suivante Impossible d'insérer la valeur NULL dans la colonne «IndianTime», table «tqms.dbo.tblindiantime»; La colonne n'autorise pas les valeurs nulles. INSERT échoue. La déclaration a été terminée.
Amit Patil du
2
@AmitPatil - Je sais que c'est vieux mais peut aider quelqu'un comme vous. Utilisez ISNULL (contacts.BusinessCountry, '') au lieu de simplement contacts.BusinessCountry et cela devrait résoudre votre problème. Nous remplaçons essentiellement null par une chaîne vide.
Ankur-m
1
Parce que cet exemple ne montre pas ce qu'est une « condition de jointure » peut - être, voir aussi la réponse de Michael Pakhantsov, et la réponse de cedrikdlb , et la réponse de Parveen à une question similaire, où deux colonnes doivent être comparés à choisir la bonne ligne .
ToolmakerSteve
152

Voici la requête:

Même tableau:

UPDATE table_name 
SET column1 = column2

Table différente:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );
Nalan Madheswaran
la source
13
Est faux dans le contexte de la question, où le demandeur implique spécifiquement 2 tables.
bPratik
2
Son fonctionnement pour mysql en cas de colonnes est lié à la même table.
Satish Pandey
11
Cela résout cependant mon problème, et je suis arrivé ici à travers le titre de la question qui correspond probablement plus à cette réponse qu'il ne correspond au détail de la question!
Rob Grant
6
Cette réponse répond au titre de la question plutôt qu'à la question elle-même. Pourtant, j'ai trouvé cela utile pour ce que j'essayais de faire.
wizard07KSU
1
c'est une excellente réponse; cela m'a aidé à copier une seule colonne de ma sauvegarde vers la table principale!
Zelter Ady
22

Tableau2.Colonne2 => Tableau1.Colonne1

Je me rends compte que cette question est ancienne mais la réponse acceptée n'a pas fonctionné pour moi. Pour les futurs googleurs, c'est ce qui a fonctionné pour moi:

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

Par lequel:

  • table1 = table contenant la colonne à mettre à jour
  • table2 = table contenant la colonne avec les données
  • column1 = colonne vide qui a besoin des données de column2 (c'est dans le tableau1)
  • colonne2 = colonne contenant les données (c'est-à-dire dans la table2)
Kenny Grage
la source
1
A travaillé pour moi - mais est la même que la réponse ci-dessus par[Michael Pakhantsov]
Don Cheadle
3
Vous avez raison, @mmcra, que c'est maintenant la même chose que la réponse ci-dessus. Cependant, ce n'était pas la même chose au moment où j'avais écrit ce commentaire. Vous remarquerez qu'il a été modifié en septembre et que les erreurs ont été corrigées. J'avais écrit ce commentaire en juin.
Kenny Grage
16

J'espère que vous avez le champ clé est de deux tables.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )
Michael Pakhantsov
la source
1
cela n'est valide que si vous remplacez un champ par un autre champ qu'il lancera ORA-01427: single-row subquery returns more than one rowsi la sélection renvoie plus d'une ligne, que faire si je veux sélectionner plus d'une ligne et mettre à jour la colonne avec ces valeurs?
Muhammad Ramahy
3
@Muhammad Ramahy, Avez-vous une table imbriquée dans la colonne de mise à jour? dans la sous-requête retourner plusieurs lignes, alors la clé n'est pas la clé primaire pour la table des contacts. Si vous avez une clé primaire composite, vous n'avez besoin que de conditions pour la clause WHERE.
Michael Pakhantsov
1
Je ne comprends pas ce que vous voulez dire par "J'espère que vous avez un champ clé, c'est deux tables"
Marco Lackovic
2
@Krige - Il signifie apparemment "Si les deux tables ont un champ Clé partagé pour identifier quelle ligne de chaque table correspond à la ligne de l'autre table" . Si vous ne le faites pas, vous devez changer ce qui se passe après WHERE. Par exemple, si tblindiantime a field ContactID, qui est le IDde la ligne dans contactslaquelle appartient à chaque ligne dans tblindiantime, alors vous utiliserez WHERE tblindiantime.ContactID=contacts.ID. Voir la réponse de cedrikdlb pour une autre variante.
ToolmakerSteve
8

La réponse à une question similaire a fonctionné plus correctement pour moi que la réponse sélectionnée à cette question (par Mark Byers). En utilisant la réponse de Mark, ma colonne mise à jour a la même valeur dans toutes les lignes (peut-être la valeur de la première ligne qui correspond à la jointure). L'utilisation de la réponse de ParveenaArora de l'autre thread a mis à jour la colonne avec les valeurs correctes.

En transformant la solution de Parveena pour utiliser les noms de table et de colonne de cette question, la requête serait la suivante (où je suppose que les tables sont liées via tblindiantime.contact_id):

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

Je pense que toutes les réponses précédentes sont correctes, ce code ci-dessous est très valide spécialement si vous devez mettre à jour plusieurs lignes à la fois, notez: c'est 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;

Je souhaite que cela puisse aider.

Muhammad Ramahy
la source
2

C'est désormais plus simple avec Management Studio 2016.

Utilisation de SQL Server Management Studio

Pour copier des données d'une table à une autre

1.Ouvrez la table avec les colonnes que vous souhaitez copier et celle dans laquelle vous souhaitez copier en cliquant avec le bouton droit sur les tables, puis en cliquant sur Conception .

2.Cliquez sur l'onglet du tableau contenant les colonnes que vous souhaitez copier et sélectionnez ces colonnes.

3.Dans le menu Edition , cliquez sur Copier .

4.Ouvrez une nouvelle fenêtre de l'éditeur de requête.

5. Cliquez avec le bouton droit sur l'éditeur de requête, puis cliquez sur Requête de conception dans l'éditeur .

6.Dans la boîte de dialogue Ajouter une table , sélectionnez la table source et de destination, cliquez sur Ajouter , puis fermez la boîte de dialogue Ajouter une table .

7. Cliquez avec le bouton droit sur une zone ouverte de l'éditeur de requête, pointez sur Modifier le type et puis cliquez sur Insérer les résultats .

8.Dans la boîte de dialogue Choisir la table cible pour les résultats d'insertion , sélectionnez la table de destination.

9.Dans la partie supérieure du Concepteur de requêtes, cliquez sur la colonne source dans la table source.

10.Le concepteur de requêtes a maintenant créé une requête INSERT. Cliquez sur OK pour placer la requête dans la fenêtre de l'éditeur de requête d'origine.

11.Exécutez la requête pour insérer les données de la table source dans la table de destination.

Pour plus d'informations https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine

Codeur
la source
1

Il peut être résolu en utilisant un attribut différent.

  • Utilisez l'événement de clic de contrôle de cellule.
  • Sélectionnez la valeur de la colonne que vous transposez en une autre colonne.
  • envoyer la valeur sélectionnée à une autre zone de texte ou à un autre niveau que vous remplissez convenablement et un bouton complémentaire pour modifier la propriété sélectionnée.
  • mettre à jour toute la pile de la base de données et créer un algorithme avec requête SQL pour surmonter celle-ci et la transposer dans une autre colonne.
user5204562
la source