2010-01-06 25 views
24

Estoy confundido acerca de cómo copiar una columna de una tabla a otra mesa usando where. Escribí una consulta SQL pero dice que el tiempo de bloqueo de la transacción excedió o la consulta devuelve más de una fila.
usando MySQL
Básicamente,
que tengo:copiar una columna de una tabla a otra

Table 1: Results 
BuildID platform_to_insert 

Table 2: build 
BuildID correct_platform 

update results set results.platform_to_insert 
    = (select correct_platform from 
     build where results.BuildID = build.BuildID) 
+0

¿Cuántas filas tiene en cada mesa? Muéstranos el mensaje de error completo y actual que MySQL te da –

+2

la forma en que escribes tu consulta puede devolver más de una fila de la subselección: ¿qué valor de correct_platform se debe tomar si hay más de uno para un determinado buildID? – davek

+0

lo que quiero hacer es: para cada BuildID de resultados, compárelo con BuildID en build es lo mismo, luego tome esa plataforma correcta de compilación e insértelo en platform_to_insert en Results – JPro

Respuesta

66

No creo que necesite una sub consulta.

UPDATE results, build 
SET results.platform_to_insert = build.correct_platform 
WHERE results.BuildID = build.BuildID 
+2

Esa pregunta impresionante resolvió mi problema muchas gracias –

+0

Guau, respuesta increíble. Esto cambia radicalmente mi comprensión de las bases de datos relacionales – Mansiemans

+0

Hii he intentado esta consulta, pero no funciona correctamente pls comprueban: staff_login_times ACTUALIZACIÓN, staff_rotas SET staff_login_times.scheduled_start = staff_rotas.startdate DONDE staff_login_times.actual_start = staff_rotas.startdate; – HIR

5

Hay dos opciones aquí:

  1. actualizar sus tablas de usar BuildID como clave principal (para evitar duplicados)
  2. actualice su subconsulta para que solo devuelva un resultado

    UPDATE results SET results.platform_to_insert = (
        SELECT correct_platform 
        FROM build 
        WHERE results.BuildID=build.BuildID LIMIT 1 
    ); 
    
+0

Quiero actualizar todas las filas de resultados – JPro

+0

el problema es que la cláusula WHERE es coincidente en varios elementos la subconsulta. Esto se puede resolver limitando el conjunto de resultados de la subconsulta a uno o convirtiendo * .BuildID en una clave primaria para evitar duplicados en primer lugar. En cualquier caso, todas las filas se actualizarán. – tmpvar

Cuestiones relacionadas