Ich muss überprüfen (aus derselben Tabelle), ob es eine Assoziation zwischen zwei Ereignissen auf der Grundlage von Datum und Uhrzeit gibt.
Ein Datensatz enthält die Endzeit bestimmter Ereignisse und der andere Datensatz enthält die Anfangszeit für andere Ereignisse.
Wenn das erste Ereignis vor dem zweiten Ereignis abgeschlossen ist, möchte ich sie miteinander verknüpfen.
Was ich bis jetzt habe, ist:
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
Dann schließe ich mich ihnen an:
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
Kann ich dann, basierend auf meinem validation_check Feld, eine UPDATE Abfrage mit dem SELECT verschachtelt ausführen?
Es gibt zwei Möglichkeiten, wie Sie dies tun können:
MySQL update join syntax:
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
ANSI-SQL-Syntax:
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)
Wählen Sie die Syntax, die Ihnen am natürlichsten erscheint.
UPDATE
`table1` AS `dest`,
(
SELECT
*
FROM
`table2`
WHERE
`id` = x
) AS `src`
SET
`dest`.`col1` = `src`.`col1`
WHERE
`dest`.`id` = x
;
Ich hoffe, das funktioniert bei Ihnen.
Wenn jemand Daten von einer Datenbank in eine andere aktualisieren möchte, unabhängig davon, auf welche Tabelle er abzielt, muss es einige Kriterien geben, um dies zu tun.
Diese ist besser und sauber für alle Ebenen:
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! Das funktioniert super!
Mit dem obigen Verständnis können Sie die Set-Felder und "on" Kriterien ändern, um Ihre Arbeit zu erledigen. Sie können auch die Prüfungen durchführen, dann die Daten in die temporäre(n) Tabelle(n) ziehen und dann die Aktualisierung mit der obigen Syntax durchführen, indem Sie Ihre Tabellen- und Spaltennamen ersetzen.
Ich hoffe, es funktioniert, wenn nicht, lassen Sie es mich wissen. Ich werde eine genaue Abfrage für Sie schreiben.