Ich muss (aus derselben Tabelle) überprüfen, ob es eine Zuordnung zwischen zwei Ereignissen basierend auf Datum und Uhrzeit gibt.
Ein Datensatz enthält das Enddatum und die Endzeit bestimmter Ereignisse, und der andere Datensatz enthält das Startdatum und die Startzeit für andere Ereignisse.
Wenn das erste Ereignis vor dem zweiten Ereignis abgeschlossen ist, möchte ich sie verknüpfen.
Was ich bisher 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 Feld validation_check eine UPDATE-Abfrage mit dem verschachtelten SELECT ausführen?
mysql
select
sql-update
John M.
quelle
quelle
Antworten:
Sie können dies auf zwei Arten tun:
MySQL-Update-Join-Syntax:
ANSI SQL-Syntax:
Wählen Sie das aus, was Ihnen am natürlichsten erscheint.
quelle
You can't specify target table ___ for update in FROM clause SQL.sql
tableA
=tableB
. Sie müssen eine temporäre Tabelle erstellen, um das Zwischenergebnis zu speichern. (musste eine ähnliche Abfrage für ein Migrationsskript schreiben)Hoffe das funktioniert bei dir.
quelle
Einfach in MySQL:
quelle
Wenn jemand versucht, Daten von einer Datenbank in eine andere zu aktualisieren, unabhängig davon, auf welche Tabelle er abzielt, muss es einige Kriterien dafür geben.
Dieser ist besser und sauber für alle Ebenen:
Traaa! Es funktioniert super!
Mit dem obigen Verständnis können Sie die festgelegten Felder und "Ein" -Kriterien ändern, um Ihre Arbeit zu erledigen. Sie können auch die Überprüfungen durchführen, dann die Daten in die temporäre (n) Tabelle (n) ziehen und dann die Aktualisierung mit der obigen Syntax ausführen, wobei Ihre Tabellen- und Spaltennamen ersetzt werden.
Hoffe es funktioniert, wenn nicht, lass es mich wissen. Ich werde eine genaue Anfrage für Sie schreiben.
quelle
Ich hoffe, dies hilft Ihnen in einem Fall, in dem Sie zwischen zwei Tabellen übereinstimmen und diese aktualisieren müssen.
quelle
Ich fand diese Frage, als ich nach meiner eigenen Lösung für einen sehr komplexen Join suchte. Dies ist eine alternative Lösung für eine komplexere Version des Problems, die ich für nützlich hielt.
Ich musste das Feld product_id in der Aktivitätstabelle ausfüllen, in der Aktivitäten in einer Einheit und Einheiten in einer Ebene nummeriert sind (identifiziert durch eine Zeichenfolge ?? N), so dass man Aktivitäten mit einer SKU, dh L1U1A1, identifizieren kann. Diese SKUs werden dann in einer anderen Tabelle gespeichert.
Ich habe Folgendes identifiziert, um eine Liste von activity_id vs product_id zu erhalten: -
Ich fand, dass dies zu komplex war, um es in ein SELECT in MySQL zu integrieren, also erstellte ich eine temporäre Tabelle und verband diese mit der Update-Anweisung: -
Ich hoffe, jemand findet das nützlich
quelle
quelle
Sie können Werte aus einer anderen Tabelle mithilfe dieser inneren Verknüpfung aktualisieren
Folgen Sie hier, um zu erfahren, wie diese Abfrage verwendet wird: http://www.voidtricks.com/mysql-inner-join-update/
oder Sie können dazu select als Unterabfrage verwenden
Abfrage hier ausführlich erklärt http://www.voidtricks.com/mysql-update-from-select/
quelle
Sie können verwenden:
quelle
Für dieselbe Tabelle,
quelle
Ich hatte ein Problem mit doppelten Einträgen in einer Tabelle. Nachfolgend finden Sie die Ansätze, die für mich funktioniert haben. Es wurde auch von @sibaz befürwortet.
Schließlich habe ich es mit den folgenden Fragen gelöst:
Die Auswahlabfrage wird in einer temporären Tabelle gespeichert
Die temporäre Tabelle wird in der Aktualisierungsabfrage verknüpft.
Ich habe keine großen Erfahrungen mit SQL. Bitte empfehlen Sie einen besseren Ansatz, den Sie kennen.
Die obigen Abfragen beziehen sich auf den MySQL-Server.
quelle