Necesito comprobar (desde la misma tabla) si existe una asociación entre dos eventos basada en la fecha-hora.
Un conjunto de datos contendrá la fecha-hora de finalización de ciertos eventos y el otro conjunto de datos contendrá la fecha-hora de inicio de otros eventos.
Si el primer evento finaliza antes que el segundo, 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
¿Puedo entonces, basándome en mi campo validation_check, ejecutar una consulta UPDATE con el SELECT anidado?
Puedes hacerlo de dos maneras:
La sintaxis de 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 ANSI SQL:
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)
Elija la que le parezca más natural.
Si alguien quiere actualizar datos de una base de datos a otra, independientemente de la tabla a la que se dirija, debe haber algún criterio 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 de conjunto y "on" criterios 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 utilizando la sintaxis anterior sustituyendo sus nombres de tabla y columna.
Espero que funcione, si no, hágamelo saber. Voy a escribir una consulta exacta para usted.