it-swarm.com.de

Aktualisieren Sie und verlassen Sie äußere Verknüpfungsanweisungen

Ich habe zwei Tabellen mit einer Beziehung und möchte ein Feld in Tabelle A aktualisieren. Ist es möglich, Aktualisierung und Beitritt in derselben Abfrage zu kombinieren? Ich habe gegoogelt, aber keine funktionierende Lösung gefunden?

UPDATE md SET md.status = '3' 
FROM pd_mounting_details AS md 
LEFT OUTER JOIN pd_order_ecolid AS oe ON md.order_data = oe.id

Ich benutze MS SQL

28
Evilaid
Update t 
SET 
       t.Column1=100
FROM 
       myTableA t 
LEFT JOIN 
       myTableB t2 
ON 
       t2.ID=t.ID

Ersetzen Sie myTableA durch Ihren Tabellennamen und ersetzen Sie Column1 Durch Ihren Spaltennamen.

Danach einfach LEFT JOIN zu tableB. t ist in diesem Fall nur ein Alias ​​für myTableA. t2 Ist ein Alias ​​für Ihre verknüpfte Tabelle, in meinem Beispiel ist das myTableB. Wenn Sie nicht gerne t oder t2 Verwenden, verwenden Sie einen beliebigen Aliasnamen.

53
JonH

Wenn Sie UPDATE von der SELECT-Anweisung benötigen, können Sie Folgendes tun:

UPDATE suppliers    
SET city = (SELECT customers.city FROM customers

WHERE customers.customer_name = suppliers.supplier_name)
7
kleinohad

Nur ein weiteres Beispiel, in dem der Wert einer Spalte aus Tabelle 1 in eine Spalte in Tabelle 2 eingefügt wird:

UPDATE  Address
SET     Phone1 = sp.Phone
FROM    Address ad LEFT JOIN Speaker sp
ON      sp.AddressID = ad.ID
WHERE   sp.Phone <> '' 
5
Tillito

Der Left-Join in dieser Abfrage ist sinnlos:

UPDATE md SET md.status = '3' 
FROM pd_mounting_details AS md 
LEFT OUTER JOIN pd_order_ecolid AS oe ON md.order_data = oe.id

Es werden alle Zeilen von pd_mounting_details Aktualisiert, unabhängig davon, ob in pd_order_ecolid Eine übereinstimmende Zeile vorhanden ist oder nicht. Wenn Sie nur übereinstimmende Zeilen aktualisieren möchten, sollte es sich um eine innere Verknüpfung handeln.

Wenn Sie eine Bedingung anwenden möchten, die auf dem Auftreten des Joins basiert, müssen Sie eine WHERE -Klausel und/oder einen CASE -Ausdruck in Ihre SET -Klausel einfügen.

In mysql muss die SET -Klausel kommen nach der JOIN. Beispiel:

UPDATE e
    LEFT JOIN a ON a.id = e.aid
    SET e.id = 2
    WHERE  
        e.type = 'user' AND
        a.country = 'US';
0
Csongor Halmai