Comunidad de diseño web y desarrollo en internet online

UPDATE con datos de un SELECT

Citar            
MensajeEscrito el 19 Feb 2009 09:36 pm
Eh estado buscando un poco y solo eh encontrado updates usando select dentro del where, pero yo necesito hacer updates usando datos de un select. me explico un poco:
Tengo dos tablas: SalidasProducto e Inventario, al cancelar una salida(Salida.id_salida=243]) tengo que incrementar el numero de salidas(salidaproducto.cantidad donde Salida.id_almacen=I.id_almacen y Salidaproducto.id_producto=Invetario.id_salida) del producto en el inventario(Inventario.existencia donde Inventario), las tres tablas son:

+---------------+
| Salida |
+---------------+
| id_salida |
| id_almacen |
| id_empleadoA |
| folio |
| fechasalida |
| tiposalida |
| precio |
| costo |
| id_proveedor |
| status |
| observaciones |
| id_empleadoE |
| fecha_salida |
+---------------+
+--------------+
|SalidaProducto|
+--------------+
| id_salida |
| id_producto |
| cantidad |
| costo |
| precio |
+--------------+

+-------------+
| Inventario |
+-------------+
| id_almacen |
| id_producto |
| existencia |
+-------------+

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 20 Feb 2009 12:55 am
el siguiente es un ejemplo de subquery, asi como funciona aqui te debe funcionar colocando el update y el subquery en donde vas a igualar tu variable. solo tienes que asegurarte de que el campo regrese un solo valor y una sola columna.

Código :

SELECT column1 FROM t1 AS x
  WHERE x.column1 = (SELECT column1 FROM t2 AS x
    WHERE x.column1 = (SELECT column1 FROM t3
      WHERE x.column2 = t3.column1));

o en este orto ejemplo se eliminan algunos datos con una estrategia similar:

Código :

DELETE FROM t1 WHERE ROW(c1,c2) IN (
SELECT c1, c2 FROM t2
);


y aqui con insert

Código :

CREATE TABLE t1 (
a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b VARCHAR(10)) TYPE=InnoDB; 

INSERT INTO t1 (b) VALUES ('Spike'), ('Chip'), ('John');

CREATE TABLE t2 (
a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b INT NOT NULL,
FOREIGN KEY (b) REFERENCES t1 (a),
c VARCHAR(15)) TYPE=InnoDB; 

Podemos insertar registros en t2 que pueblan la columna de clave externa sobre la base de un comando SELECT de t1:

INSERT INTO t2 (b, c)
VALUES ((SELECT a FROM t1 WHERE b='Chip'), 'shoulder'),
((SELECT a FROM t1 WHERE b='Chip'), 'old block'),
((SELECT a FROM t1 WHERE b='John'), 'toilet'),
((SELECT a FROM t1 WHERE b='John'), 'long,silver'),
((SELECT a FROM t1 WHERE b='John'), 'li''l');

mas informacion al respecto en
saludos :cool:

Por DanielJimenez

70 de clabLevel



Genero:Masculino  

Web Developer

msie7
Citar            
MensajeEscrito el 20 Feb 2009 12:57 am

Por DanielJimenez

70 de clabLevel



Genero:Masculino  

Web Developer

msie7
Citar            
MensajeEscrito el 20 Feb 2009 07:56 am
UPDATE tabla SET campo = (SELECT camp_2 FROM tabla_2) WHERE campo_3 = x

Por Joanlgr

15 de clabLevel



Genero:Masculino  

Eterno aprendiz

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.