Heim > Datenbank > MySQL-Tutorial > Hauptteil

Aktualisierung der MySQL-Multitabellenzuordnung

(*-*)浩
Freigeben: 2019-05-11 09:50:12
Original
7150 Leute haben es durchsucht

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.

Aktualisierung der MySQL-Multitabellenzuordnung

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)
Nach dem Login kopieren

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
)
Nach dem Login kopieren

1) Die einfachste Form

--经确认customers表中所有customer_id小于1000均为'北京'
--1000以内的均是公司走向全国之前的本城市的老客户:)
update customers
set city_name='北京'
where customer_id<1000
Nach dem Login kopieren

2) Zwei Tabellen (mehrere Tabellen) verwandte Aktualisierung – nur die Verbindung in der where-Klausel

--这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别
update customers a -- 使用别名
set customer_type=&#39;01&#39; --01 为vip,00为普通
where exists (select 1
from tmp_cust_city b
where b.customer_id=a.customer_id
)
Nach dem Login kopieren

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
)
Nach dem Login kopieren

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
)
Nach dem Login kopieren
<🎜 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),&#39;未知&#39;)
-- 当然这不符合业务逻辑了
Nach dem Login kopieren

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
)
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage