Wie kann ich dazu eine UPDATE-Anweisung mit JOIN in SQL?
Brauche ich zum aktualisieren dieser Tabelle in SQL Server 2005 mit Daten aus der "Eltern" - Tabelle, siehe unten:
Verkauf
id (int)
udid (int)
assid (int)
ud
id (int)
assid (int)
sale.assid
enthält den korrekten Wert zu aktualisieren ud.assid
.
Was die Abfrage tun? Ich denke, ein join
aber ich bin mir nicht sicher, ob es möglich ist.
Was RDBMS verwenden Sie? MySQL, SQL-Server, Oracle, PostgreSQL oder etwas anderes?
einige Beziehungen zwischen den Tabellen? Wie kann man wissen, welcher Datensatz aus der Veräußerung entspricht, auf die Aufzeichnung von ud? Ist es basierend auf id, die als Primärschlüssel in beiden Tabellen?
Wie können Sie update-UD? Es hat nur die assid und eigene ID. Könnten Sie uns ein Beispiel geben in Bezug auf die tatsächlichen Werte, die vorhanden sind, und die Datensätze, die Sie geändert oder Hinzugefügt werden als ein Ergebnis des Skripts?
Siehe auch Frage ... stackoverflow.com/questions/982919/sql-update-query-using-joins
User-Alias in der Abfrage wie stackoverflow.com/questions/982919/sql-update-query-using-joins
einige Beziehungen zwischen den Tabellen? Wie kann man wissen, welcher Datensatz aus der Veräußerung entspricht, auf die Aufzeichnung von ud? Ist es basierend auf id, die als Primärschlüssel in beiden Tabellen?
Wie können Sie update-UD? Es hat nur die assid und eigene ID. Könnten Sie uns ein Beispiel geben in Bezug auf die tatsächlichen Werte, die vorhanden sind, und die Datensätze, die Sie geändert oder Hinzugefügt werden als ein Ergebnis des Skripts?
Siehe auch Frage ... stackoverflow.com/questions/982919/sql-update-query-using-joins
User-Alias in der Abfrage wie stackoverflow.com/questions/982919/sql-update-query-using-joins
InformationsquelleAutor Ant Swift | 2009-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Syntax streng hängt davon ab, welche SQL-DBMS du verwendest. Hier sind einige Möglichkeiten, es zu tun in der ANSI/ISO (aka sollte auf jedem SQL-DBMS) MySQL, SQL Server und Oracle. Beachten Sie, dass meine vorgeschlagenen ANSI - /ISO-Verfahren wird in der Regel viel langsamer als die beiden anderen Methoden, aber wenn Sie mit einer SQL-DBMS andere als MySQL, SQL-Server oder Oracle, dann ist es vielleicht der einzige Weg zu gehen (z.B. wenn Ihre SQL-DBMS nicht unterstützt
MERGE
):ANSI/ISO:
MySQL:
SQL Server:
PostgreSQL:
Beachten Sie, dass die Ziel-Tabelle muss nicht wiederholt werden, die
FROM
Klausel für Postgres.Oracle:
SQLite:
set assid = s.assid
sollteset u.assid = s.assid
.In der ANSI-syntax, was passiert, wenn die WÄHLEN Sie nach der
=
gibt mehr als eine Zeile?Es würde wahrscheinlich scheitern. AFAIK, diese Art von Betrieb würde erwarten, dass ein skalarer Wert und wirft einen Fehler, wenn da ein Ergebnis, statt.
Antwort arbeitet für
sqlite3
.Ich Wünsche, dass die OP wählen, einige bessere Namen für seine Tabelle und Spalten!! es ist nicht so lesbar und intuitiv...
InformationsquelleAutor Eric
Diese Arbeit sollte in SQL Server:
InformationsquelleAutor edosoft
postgres
InformationsquelleAutor user1154043
Einer standard-SQL-Ansatz wäre
Auf SQL Server können Sie eine join -
huh? Sie können einfach weitere Bedingungen hinzufügen, in der
WHERE
- Klausel, wenn Sie wollen, passen Sie auf weitere Spalten.Nur nit... aber ich denke, der OP meinte Verkauf.Geräte-id = ud.id. Und nicht Verkauf.id.
Erste gearbeitet für mich in Oracle-SQL.
InformationsquelleAutor MattH
PostgreSQL:
InformationsquelleAutor alfonx
Vereinfachte update-Abfrage mit JOIN-ing mehreren Tabellen.
Hinweis - first_table, second_table, third_table und some_column wie 123456 sind demo-Tabellennamen, Spaltennamen und-ids. Ersetzen Sie Sie mit den gültigen Namen.
InformationsquelleAutor Vinit Kadkol
Weiteres Beispiel, warum SQL nicht wirklich tragbar.
Für MySQL wäre es:
Für weitere Informationen Lesen Sie multiple-table update:
http://dev.mysql.com/doc/refman/5.0/en/update.html
InformationsquelleAutor Yada
Teradata Aster bietet eine interessante Möglichkeit, wie das Ziel zu erreichen:
InformationsquelleAutor xhudik
Ich dachte die SQL-Server-eine im oberen post arbeiten würde, für Sybase, denn Sie sind beide T-SQL aber leider nicht.
Für Sybase ich fand das update muss auf dem Tisch selbst nicht den alias:
InformationsquelleAutor Ken Goh
MySQL
Erhalten Sie die beste Leistung, wenn Sie vergessen, die where-Klausel und stellen Sie alle Bedingungen im Ausdruck.
Ich denke, das ist, weil erst die Abfrage hat, die Tabellen zu verknüpfen, dann läuft der where-Klausel auf, dass, so dass, wenn Sie reduzieren können, was erforderlich ist, beizutreten, dann geht das am schnellsten Weg, um die Ergebnisse zu bekommen/tun udpate.
Beispiel
Szenario
Haben Sie eine Tabelle der Benutzer. Sie können sich anmelden mit Ihrem Benutzernamen oder E-Mail oder account_number. Diese Konten können aktiv sein (1) oder inaktiv (0). Diese Tabelle hat 50000 Zeilen
Haben Sie dann eine Tabelle von Benutzern zu deaktivieren, die auf einen gehen, weil Sie finden heraus, dass Sie alle haben etwas schlimmes gemacht. Diese Tabelle hat jedoch eine Spalte mit Benutzernamen, E-Mails und Konto-Nummern gemischt. Es hat auch eine "has_run" - Anzeige, die muss auf 1 gesetzt werden (true) zurück, wenn es ausgeführt wurde,
Abfrage
Argumentation
Wenn wir hatten, um uns auf nur die ODER Bedingungen es im Grunde brauchen, um zu überprüfen, jede Zeile 4 mal, um zu sehen, ob es beitreten soll, und potenziell zurück sehr viel mehr Zeilen. Jedoch, indem Sie mehrere Bedingungen es kann "überspringen" eine Menge von Zeilen, wenn Sie nicht erfüllen alle Bedingungen, die beim Eintritt.
Bonus
Ist es besser lesbar. Alle Bedingungen sind in einem Ort und die zu aktualisierenden Zeilen sind in einem Ort
InformationsquelleAutor Luke Watts
Folgende Anweisung mit Schlüsselwort wird verwendet, um mehrere Zeilen aktualisieren mit einem join
InformationsquelleAutor Sheryar Nizar
Und in MS ACCESS:
InformationsquelleAutor Richard
InformationsquelleAutor Abdullah Yousuf
Für SQLite verwenden Sie die RowID-Eigenschaft, um die Aktualisierung vorzunehmen:
Ich werde versuchen zu erklären. Das problem ist, wie zum aktualisieren einer Tabelle mit einem Ergebnis aus einer Abfrage über einen Join mit der gleichen Tabelle. Die (sub-select) - Anweisung verhält sich wie eine Verknüpfung und gibt ein Systemfeld, RowID, die eine eindeutige Nummer für jede Zeile in einer Tabelle. Da die sub-select kann mehrere Zeilen zurückgeben "" where RowID =" wählt einen einzigen richtigen Zeilen aus der resultierenden Untermenü auswählen und das update auf die Spalte. Lassen Sie mich wissen, wenn Sie weitere Informationen brauchen, um herauszufinden, eine variation über dieses Thema.
InformationsquelleAutor KeithTheBiped
Versuchen, diese, ich denke, dass dies für Sie funktioniert
InformationsquelleAutor HARSHIT RATHORE
Der einfachste Weg ist die Common Table Expression (CTE) eingeführt in SQL 2005
InformationsquelleAutor Kemal AL GAZZAH