Actualización de SQL Server 2008 tabla con los valores de otra tabla

A continuación puedes ver mi simplificado DB modelo:

Actualización de SQL Server 2008 tabla con los valores de otra tabla

Debido a un error sólo hay valores null en la columna Trabajo.ubicación donde las entradas que pertenezcan a un determinado Plan de. Por lo tanto, quiero actualizar todos los Trabajos asociados con este Plan, el establecimiento de Trabajo.ubicación a Ubicación.nombre de la Usuario, que es el dueño de este Plan.

He probado esta consulta SQL:

    update dbo.Job set location =

        (select name from dbo.Location as loc where

           loc.objectid = objectid  and loc.user_id in 

           (select userid from dbo.[Plan] as p where p.planid = 20))

        where planid = 20

Sin embargo, el resultado es siempre: 0 filas afectadas. Las subconsultas sí funciona correctamente.

¿Cómo puedo lograr que todos los Puestos de trabajo con una cierta planid están afectados?

InformationsquelleAutor curiosity | 2012-12-12

2 Kommentare

  1. 5

    Creo que el error puede ser que usted no tiene el alias para objectid columna en una subconsulta loc.objectid = objectid, por lo que cuando se ejecuta subconsulta por sí mismo, simplemente funciona como loc.objectid = loc.objectid y cuando se ejecuta en la actualización, funciona como loc.objectid = dbo.Job.objectid

    En su esquema es posible tener varias ubicaciones para los usuarios, pero suponiendo que usted tiene sólo un lugar por el usuario y el objeto, puedes probar con esta consulta:

    update dbo.Job set
        location = L.Name
    from dbo.Job as J
        inner join dbo.[Plan] as P on P.planid = J.planid
        inner join dbo.Location as L on L.user_id = P.userid and L.objectid = J.objectid
    • Gracias, esto funciona! Sólo tenía que añadir «de J. planid = 20′ en la última fila.
  2. 1
    UPDATE
    j
    SET Job.location = loc.name
    FROM
    Job j
    INNER JOIN Plan p ON j.planid = p.planid
    INNER JOIN aspnet_Users u ON p.userid = u.UserId
    INNER JOIN Location loc ON u.UserId = loc.user_id
    WHERE j.planid = 20 
    AND p.planid = 20

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea