SQL - Query con select para hacer un update masivo

 
Vista:
sin imagen de perfil

Query con select para hacer un update masivo

Publicado por r00t (4 intervenciones) el 30/10/2015 21:28:43
como hacer un update masivo pero con datos de diferentes tablas??

les explico, debo modificar solo un grupo de usuarios asignandoles un privilegio diferente, para modificarle mi filtro es este año 2015.

mi query donde ya selecciono los datos que voy actualizar ya filtrados
el dato comun entre las dos tablas es el de cvepersona


SELECT c.cveusuario, c.cvepersona,c.matricula, d.cvepersona, d.grupomenu, d.grupotrabajo

FROM c_usuario c, c_persona d

WHERE c.cvepersona=d.cvepersona AND c.matricula LIKE = '2015% '


aca con este query ya filtre mis usuarios con el 2015


ahora lo que necesito yo hacer con el UPDATE es de la tabla c_persona modificar el grupomenu y grupotrabajo

algo asi....

UPDATE c_persona
SET grupomenu='2', grupotrabajo='12'

(((pero para que no afecte a todos los usuarios mi condicion usar el selec de arriba ))

WHERE (aca no se como poner la condicion o si esta bien en mi selec)

espero haberme dado a entender :s
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Query con select para hacer un update masivo

Publicado por Isaias (1921 intervenciones) el 30/10/2015 21:54:44
¿Que motor de base de datos estas ocupando?


Para SQL Server, seria algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-- Target Table
 
DECLARE @tgt TABLE (OrdID INT, ItemID INT, Qty INT, Price MONEY);
INSERT INTO @tgt (OrdID, ItemID, Qty, Price)
    SELECT 1, 100, 10, 10.00 UNION ALL
    SELECT 1, 101, 10, 12.00
 
 
OrdID       ItemID      Qty         Price
----------- ----------- ----------- ---------------------
1           100         10          10.00
1           101         10          12.00
 
-- Source Table
DECLARE @src TABLE (OrdID INT, ItemID INT, Qty INT, Price MONEY);
INSERT INTO @src (OrdID, ItemID, Qty, Price)
    SELECT 1, 100, 12, 10.00 UNION ALL
    SELECT 1, 102, 10, 12.00 UNION ALL
    SELECT 1, 103, 5, 7.00
 
 
OrdID       ItemID      Qty         Price
----------- ----------- ----------- ---------------------
1           100         12          13.00
1           102         10          12.00
1           103         5           7.00
 
MERGE @tgt AS t
USING @src AS s
ON t.OrdID = s.OrdID AND t.ItemID = s.ItemID
WHEN MATCHED THEN
  UPDATE SET
    t.Qty = s.Qty,
    t.Price = s.Price;

Para tu caso, seria algo asi mas sencillo:

1
2
3
4
UPDATE c_persona
SET grupomenu='2', grupotrabajo='12'
FROM c_persona CP inner join c_usuario CU on CP.cvepersona = CU.cvepersona  --- desconozco que columna une a las tablas
WHERE CP.matricula  LIKE = '2015% '


PD: Ambas TABLAS deben "unirse" por campo(s) especificos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Query con select para hacer un update masivo

Publicado por r00t (4 intervenciones) el 30/10/2015 22:09:27
creo puse muchas palabras y ni yo me entiendo, este es el select que uso en mysql administrator para debian




SELECT c.`c_n_cve_usuario`, c.`c_n_cve_persona`, c.`d_c_matricula`,
cp.`c_n_cve_persona`, cp.`c_n_cve_grupo_menu`, cp.`c_n_cve_grupo_centro_trabajo`


FROM c_usuario c, c_persona cp


WHERE c.c_n_cve_persona=cp.c_n_cve_persona ** esta es la que une***

AND c.`d_c_matricula`='2015%'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Query con select para hacer un update masivo

Publicado por Isaias (1921 intervenciones) el 30/10/2015 22:22:31
Modifica, el ultimo query que puse, adaptalo para MYSQL y seguro funcionara.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar