In diesem Artikel wird die Methode zur Implementierung der Multi-Table-Association-Aktualisierung in MySQL erläutert und einige häufig verwendete Beispiele für die Multi-Table-Aktualisierung als Referenz vorgestellt.
Empfohlener Kurs: MySQL-Tutorial.
Erstellen Sie das folgende einfache Modell und erstellen Sie einige Testdaten:
In einem bestimmten Geschäftsakzeptanz-Subsystem BSS,
--客户资料表 create table customers ( customer_id number(8) not null, -- 客户标示 city_name varchar2(10) not null, -- 所在城市 customer_type char(2) not null, -- 客户类型 ... ) create unique index PK_customers on customers (customer_id)
Aus irgendeinem Grund dass die Informationen über die Stadt, in der sich der Kunde befindet, nicht korrekt sind, aber im CRM-Subsystem der Kundendienstabteilung genaue Informationen wie die Stadt, in der sich 20 % einiger Kunden befinden, durch proaktive Dienste erhalten, also extrahieren Sie diese Teil der Informationen zu einem temporären In der Tabelle:
create table tmp_cust_city ( customer_id number(8) not null, citye_name varchar2(10) not null, customer_type char(2) not null )
1) Die einfachste Form
--经确认customers表中所有customer_id小于1000均为'北京' --1000以内的均是公司走向全国之前的本城市的老客户:) update customers set city_name='北京' where customer_id<1000
2) Zwei Tabellen (mehrere Tabellen) verwandte Aktualisierung – nur die Verbindung in der where-Klausel
--这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别 update customers a -- 使用别名 set customer_type='01' --01 为vip,00为普通 where exists (select 1 from tmp_cust_city b where b.customer_id=a.customer_id )
3) Aktualisierung mit zwei Tabellen (mehreren Tabellen) – der geänderte Wert wird aus einer anderen Tabelle berechnet
update customers a -- 使用别名 set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id) where exists (select 1 from tmp_cust_city b where b.customer_id=a.customer_id ) -- update 超过2个值 update customers a -- 使用别名 set (city_name,customer_type)=(select b.city_name,b.customer_type from tmp_cust_city b where b.customer_id=a.customer_id) where exists (select 1 from tmp_cust_city b where b.customer_id=a.customer_id )
Beachten Sie, dass in dieser Anweisung
(select b.city_name,b.customer_type from tmp_cust_city b where b.customer_id=a.customer_id ) 与 (select 1 from tmp_cust_city b where b.customer_id=a.customer_id )<🎜 steht > ist zwei unabhängige Unterelemente. Abfrage, überprüfen Sie den Ausführungsplan und Sie können sehen, dass 2 Artikel nach Tabelle b/index gescannt wurden Wenn die Where-Bedingung verworfen wird, wird Tabelle A standardmäßig aktualisiert für die gesamte Tabelle, aber aufgrund von (select b. city_name from tmp_cust_city b where where where b.customer_id=a.customer_id)Es ist möglich, dass „genug“ Werte nicht bereitgestellt werden können , da tmp_cust_city nur ein Teil der Kundeninformationen ist, daher wird ein Fehler gemeldet (falls angegeben, kann Column--city_name NULL sein, was eine andere Sache ist): 01407, 00000, " (%s) kann nicht auf NULL aktualisiert werden"// *Ursache: // *Aktion:Ersetzungsmethode:
update customers a -- 使用别名 set city_name=nvl((select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id),a.city_name) 或者 set city_name=nvl((select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id),'未知') -- 当然这不符合业务逻辑了Eine einfachere Methode besteht darin, Tabelle A in den Wertausdruck zu ersetzen und die Klauseln „group by“ und „withing“ zu verwenden, um doppelte Datensätze anzuzeigen.
(select b.customer_id,b.city_name,count(*) from tmp_cust_city b,customers a where b.customer_id=a.customer_id group by b.customer_id,b.city_name having count(*)>=2 )
Das obige ist der detaillierte Inhalt vonAktualisierung der MySQL-Multitabellenzuordnung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!