Copie los datos de una columna a otra columna (que está en una tabla diferente)

89

Quiero copiar datos de una columna a otra columna de otra tabla. ¿Cómo puedo hacer eso?

Intenté lo siguiente:

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

Pero no funcionó.

Quiero copiar la columna "BusinessCountry" de la tabla de contactos a la columna "CountryName" de la tabla tblindiantime.

Amit Patil
fuente
1
Para copiar columnas de una tabla a otra, necesita algún tipo de relación entre las tablas. ¿Las dos tablas tienen un ID común?
mdma
1
¿Qué base de datos y versión estás usando?
Mark Byers

Respuestas:

89

En SQL Server 2008, puede utilizar una actualización de varias tablas de la siguiente manera:

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

Necesita una condición de combinación para especificar qué fila debe actualizarse.

Si la tabla de destino está actualmente vacía, entonces debería usar un INSERTAR en su lugar:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts
Mark Byers
fuente
1
Hola, gracias por su representante, pero me muestra el siguiente error No se puede insertar el valor NULL en la columna 'IndianTime', tabla 'tqms.dbo.tblindiantime'; la columna no permite valores nulos. INSERT falla. La instrucción se ha terminado.
Amit Patil
2
@AmitPatil: sé que esto es antiguo, pero puede ayudar a alguien como tú. Use ISNULL (contactos.BusinessCountry, '') en lugar de solo contactos.BusinessCountry y debería resolver su problema. Básicamente, estamos reemplazando nulo con una cadena vacía.
Ankur-m
1
Debido a que este ejemplo no muestra lo que podría ser una "condición de unión", consulte también la respuesta de Michael Pakhantsov y la respuesta de cedrikdlb , y la respuesta de Parveen a una pregunta similar, donde se deben comparar dos columnas para elegir la fila correcta .
ToolmakerSteve
152

Aquí la consulta:

Misma Tabla:

UPDATE table_name 
SET column1 = column2

Mesa diferente:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );
Nalan Madheswaran
fuente
13
Está mal en el contexto de la pregunta, donde el autor de la pregunta involucra específicamente 2 tablas.
bPratik
2
Su funcionamiento para mysql en caso de que las columnas estén relacionadas con la misma tabla.
Satish Pandey
11
Sin embargo, esto resuelve mi problema, y ​​llegué aquí a través del título de la pregunta que probablemente coincide con esta respuesta más de lo que coincide con el detalle de la pregunta.
Rob Grant
6
Esta respuesta responde al título de la pregunta, en lugar de a la pregunta en sí. Aún así, encontré esto útil para lo que estaba tratando de hacer.
wizard07KSU
1
esta es una excelente respuesta; ¡Me ayudó a copiar solo una columna de mi copia de seguridad a la tabla principal!
Zelter Ady
22

Table2.Column2 => Table1.Column1

Me doy cuenta de que esta pregunta es antigua, pero la respuesta aceptada no me funcionó. Para los futuros usuarios de Google, esto es lo que funcionó para mí:

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

Por lo cual:

  • table1 = tabla que tiene la columna que debe actualizarse
  • table2 = tabla que tiene la columna con los datos
  • column1 = columna en blanco que necesita los datos de column2 (esto está en la tabla1)
  • column2 = columna que tiene los datos (que está en la tabla2)
Kenny Grage
fuente
1
Trabajado para mí - pero es igual que la respuesta anterior por[Michael Pakhantsov]
Don Cheadle
3
Tienes razón, @mmcra, que ahora es lo mismo que la respuesta anterior. Sin embargo, no era lo mismo en el momento en que escribí este comentario. Notará que se editó en septiembre y se corrigieron los errores. Había escrito este comentario en junio.
Kenny Grage
16

Espero que tengas un campo clave en dos tablas.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )
Michael Pakhantsov
fuente
1
esto es válido solo si reemplaza un campo por otro campo que arrojará ORA-01427: single-row subquery returns more than one rowsi la selección devuelve más de una fila, ¿qué pasa si quiero seleccionar más de una fila y actualizar la columna con estos valores?
Muhammad Ramahy
3
@Muhammad Ramahy, ¿tiene una tabla anidada en la columna de actualización? en la subconsulta, devuelve varias filas, luego la clave no es PrimaryKey para la tabla de contactos. Si tiene una clave primaria compuesta, solo necesita condiciones para la cláusula WHERE.
Michael Pakhantsov
1
No entiendo lo que quieres decir con "Espero que tengas un campo clave en dos mesas"
Marco Lackovic
2
@Krige: aparentemente quiere decir "Si las dos tablas tienen un campo de clave compartido para identificar qué fila de cada tabla coincide con la fila de la otra tabla" . Si no lo hace, entonces necesita cambiar lo que está después WHERE. Por ejemplo, si tblindiantime tiene un campo ContactID, que es el IDde la fila a la contactsque pertenece cada fila en tblindiantime, entonces usaría WHERE tblindiantime.ContactID=contacts.ID. Vea la respuesta de cedrikdlb para otra variación.
ToolmakerSteve
8

La respuesta de una pregunta similar funcionó más correctamente para mí que la respuesta seleccionada de esta pregunta (por Mark Byers). Usando la respuesta de Mark, mi columna actualizada obtuvo el mismo valor en todas las filas (quizás el valor de la primera fila que coincidió con la combinación). El uso de la respuesta de ParveenaArora del otro hilo actualizó la columna con los valores correctos.

Al transformar la solución de Parveena para usar los nombres de tabla y columna de esta pregunta, la consulta sería la siguiente (donde supongo que las tablas están relacionadas a través de tblindiantime.contact_id):

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

Creo que todas las respuestas anteriores son correctas, este código a continuación es muy válido, especialmente si tiene que actualizar varias filas a la vez, nota: es 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;

Ojalá esto pudiera ayudar.

Muhammad Ramahy
fuente
2

Ahora es más fácil con Management Studio 2016.

Usando SQL Server Management Studio

Para copiar datos de una tabla a otra

1. Abra la tabla con las columnas que desea copiar y en la que desea copiar haciendo clic derecho en las tablas y luego en Diseño .

2. Haga clic en la pestaña de la tabla con las columnas que desea copiar y seleccione esas columnas.

3. En el menú Editar , haga clic en Copiar .

4.Abra una nueva ventana del Editor de consultas.

5.Haga clic con el botón derecho en el Editor de consultas y luego haga clic en Diseñar consulta en el editor .

6. En el cuadro de diálogo Agregar tabla , seleccione la tabla de origen y destino, haga clic en Agregar y luego cierre el cuadro de diálogo Agregar tabla .

7. Haga clic con el botón derecho en un área abierta del Editor de consultas, seleccione Cambiar tipo y luego haga clic en Insertar resultados .

En el cuadro de diálogo Elegir tabla de destino para insertar resultados , seleccione la tabla de destino.

En la parte superior del Diseñador de consultas, haga clic en la columna de origen en la tabla de origen.

10. El Diseñador de consultas ha creado ahora una consulta INSERT. Haga clic en Aceptar para colocar la consulta en la ventana del Editor de consultas original.

11. Ejecute la consulta para insertar los datos de la tabla de origen en la tabla de destino.

Para obtener más información https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine

Descifrador
fuente
1

Se puede resolver utilizando un atributo diferente.

  • Utilice el evento de clic de Control de celda.
  • Seleccione el valor de la columna que transpondrá a otra columna.
  • envía el valor seleccionado al otro cuadro de texto o nivel lo que llenes conveniente y un botón complementario para modificar la propiedad seleccionada.
  • actualice toda la pila de la base de datos y haga un algoritmo con la consulta sql para superar este y transponerlo a la otra columna.
user5204562
fuente