update una same paso partir pagina inner hacer from ejemplo datos crear con como mysql select sql-update

una - update select mysql ejemplo



MySQL-ACTUALIZAR consulta basada en consulta SELECT (12)

Necesito verificar (de la misma tabla) si hay una asociación entre dos eventos basados ​​en la fecha y la hora.

Un conjunto de datos contendrá la fecha y hora de finalización de ciertos eventos y el otro conjunto de datos contendrá la fecha y hora de inicio para otros eventos.

Si el primer evento se completa antes del segundo evento, me gustaría vincularlos.

Lo que tengo hasta ahora es:

SELECT name as name_A, date-time as end_DTS, id as id_A FROM tableA WHERE criteria = 1 SELECT name as name_B, date-time as start_DTS, id as id_B FROM tableA WHERE criteria = 2

Entonces me uno a ellos:

SELECT name_A, name_B, id_A, id_B, if(start_DTS > end_DTS,''VALID'','''') as validation_check FROM tableA LEFT JOIN tableB ON name_A = name_B

Entonces, ¿puedo, en función de mi campo validation_check, ejecutar una consulta de ACTUALIZACIÓN con el SELECT anidado?


Consulte con la siguiente consulta.

actualizar la tabla A Una tabla de unión interna B B en A.name_a = B.name_b establecer validation_check = if (start_dts> end_dts, ''VALID'', '''')


Encontré esta pregunta buscando mi propia solución para una unión muy compleja. Esta es una solución alternativa a una versión más compleja del problema, que creo que podría ser útil.

Necesitaba rellenar el campo product_id en la tabla de actividades, donde las actividades se numeran en una unidad y las unidades se numeran en un nivel (identificado mediante una cadena ?? N), de manera que se pueden identificar actividades utilizando un SKU, es decir, L1U1A1. Esos SKU se almacenan en una tabla diferente.

Identifiqué lo siguiente para obtener una lista de activity_id vs product_id: -

SELECT a.activity_id, w.product_id FROM activities a JOIN units USING(unit_id) JOIN product_types USING(product_type_id) JOIN web_products w ON sku=CONCAT(''L'',SUBSTR(product_type_code,3), ''U'',unit_index, ''A'',activity_index)

Descubrí que eso era demasiado complejo para incorporarlo en un SELECT dentro de mysql, así que creé una tabla temporal, y me uní a eso con la declaración de actualización:

CREATE TEMPORARY TABLE activity_product_ids AS (<the above select statement>); UPDATE activities a JOIN activity_product_ids b ON a.activity_id=b.activity_id SET a.product_id=b.product_id;

Espero que alguien encuentre esto útil


Fácil en MySQL:

UPDATE users AS U1, users AS U2 SET U1.name_one = U2.name_colX WHERE U2.user_id = U1.user_id


Para la misma mesa,

UPDATE PHA_BILL_SEGMENT AS PHA, (SELECT BILL_ID, COUNT(REGISTRATION_NUMBER) AS REG FROM PHA_BILL_SEGMENT GROUP BY REGISTRATION_NUMBER, BILL_DATE, BILL_AMOUNT HAVING REG > 1) T SET PHA.BILL_DATE = PHA.BILL_DATE + 2 WHERE PHA.BILL_ID = T.BILL_ID;


Puedes actualizar los valores de otra tabla usando una combinación interna como esta

UPDATE [table1_name] AS t1 INNER JOIN [table2_name] AS t2 ON t1.column1_name] = t2.[column1_name] SET t1.[column2_name] = t2.column2_name];

Siga aquí para saber cómo usar esta consulta http://www.voidtricks.com/mysql-inner-join-update/

o puede usar seleccionar como subconsulta para hacer esto

UPDATE [table_name] SET [column_name] = (SELECT [column_name] FROM [table_name] WHERE [column_name] = [value]) WHERE [column_name] = [value];

consulta explicada en detalles aquí http://www.voidtricks.com/mysql-update-from-select/


Puedes hacer esto de dos maneras:

Sintaxis de unirse a la actualización de MySQL:

update tableA a inner join tableB b on a.name_a = b.name_b set validation_check = if(start_dts > end_dts, ''VALID'', '''') -- where clause can go here

Sintaxis de SQL ANSI:

update tableA set validation_check = (SELECT if(start_DTS > end_DTS,''VALID'','''') as validation_check FROM tableA INNER JOIN tableB ON name_A = name_B WHERE id_A = tableA.id_A)

Elige el que te parezca más natural.


Puedes usar:

UPDATE Station AS st1, StationOld AS st2 SET st1.already_used = 1 WHERE st1.code = st2.code


Si alguien está buscando actualizar los datos de una base de datos a otra sin importar a qué tabla se dirigen, debe haber algunos criterios para hacerlo.

Este es mejor y limpio para todos los niveles:

update dbname1.content targetTable left join dbname2.someothertable sourceTable on targetTable.compare_field= sourceTable.compare_field set targetTable.col1 = sourceTable.cola ,targetTable.col2 = sourceTable.colb ,targetTable.col3 = sourceTable.colc ,targetTable.col4 = sourceTable.cold

Traaa! Funciona muy bien

Con la comprensión anterior, puede modificar los campos establecidos y los criterios "en" para hacer su trabajo. También puede realizar las comprobaciones, luego extraer los datos en la (s) tabla (s) temporal (es) y luego ejecutar la actualización usando la sintaxis anterior reemplazando sus nombres de tabla y columna.

Espero que funcione, si no me avisas. Voy a escribir una consulta exacta para usted.


Tuve un problema con las entradas duplicadas en una tabla. A continuación se muestran los enfoques que estaban trabajando para mí. También ha sido defendido por @sibaz.

Finalmente lo resolví usando las siguientes consultas:

  1. La consulta de selección se guarda en una tabla temporal.

    IF OBJECT_ID(N''tempdb..#New_format_donor_temp'', N''U'') IS NOT NULL DROP TABLE #New_format_donor_temp; select * into #New_format_donor_temp from DONOR_EMPLOYMENTS where DONOR_ID IN ( 1, 2 ) -- Test New_format_donor_temp -- SELECT * -- FROM #New_format_donor_temp;

  2. La tabla temporal se une en la consulta de actualización.

    UPDATE de SET STATUS_CD=de_new.STATUS_CD, STATUS_REASON_CD=de_new.STATUS_REASON_CD, TYPE_CD=de_new.TYPE_CD FROM DONOR_EMPLOYMENTS AS de INNER JOIN #New_format_donor_temp AS de_new ON de_new.EMP_NO = de.EMP_NO WHERE de.DONOR_ID IN ( 3, 4 )

No tengo mucha experiencia con SQL, por favor aconsejo un mejor enfoque que conozca.

Las consultas anteriores son para el servidor MySql.


UPDATE `table1` AS `dest`, ( SELECT * FROM `table2` WHERE `id` = x ) AS `src` SET `dest`.`col1` = `src`.`col1` WHERE `dest`.`id` = x ;

Espero que esto funcione para usted.


UPDATE receipt_invoices dest, ( SELECT `receipt_id`, CAST((net * 100) / 112 AS DECIMAL (11, 2)) witoutvat FROM receipt WHERE CAST((net * 100) / 112 AS DECIMAL (11, 2)) != total AND vat_percentage = 12 ) src SET dest.price = src.witoutvat, dest.amount = src.witoutvat WHERE col_tobefixed = 1 AND dest.`receipt_id` = src.receipt_id ;

Espero que esto te ayude en el caso de que tengas que combinar y actualizar entre dos tablas.


UPDATE [table_name] AS T1, (SELECT [column_name] FROM [table_name] WHERE [column_name] = [value]) AS T2 SET T1.[column_name]=T2.[column_name] + 1 WHERE T1.[column_name] = [value];