Ho bisogno di controllare (dalla stessa tabella) se c'è un'associazione tra due eventi basata sulla data-ora.
Una serie di dati conterrà la data-ora di fine di certi eventi e l'altra serie di dati conterrà la data-ora di inizio di altri eventi.
Se il primo evento termina prima del secondo evento, allora vorrei collegarli.
Quello che ho finora è:
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
Poi mi unisco a loro:
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
Posso poi, in base al mio campo validation_check, eseguire una query UPDATE con la SELECT annidata?
In realtà si può fare in due modi:
Sintassi di aggiornamento 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
Sintassi 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)
Scegliete quella che vi sembra più naturale.
Se qualcuno sta cercando di aggiornare i dati da un database a un altro, non importa quale tabella, ci deve essere qualche criterio per farlo.
Questo è migliore e pulito per tutti i livelli:
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! Funziona alla grande!
Con la comprensione di cui sopra, potete modificare i campi impostati e i criteri "on" per fare il vostro lavoro. Puoi anche eseguire i controlli, poi tirare i dati nelle tabelle temporanee e poi eseguire l'aggiornamento usando la sintassi di cui sopra sostituendo i nomi delle tabelle e delle colonne.
Spero che funzioni, altrimenti fammi sapere. Scriverò una query esatta per te.