Heim  >  Artikel  >  Datenbank  >  Aktualisierung der MySQL-Multitabellenzuordnung

Aktualisierung der MySQL-Multitabellenzuordnung

(*-*)浩
(*-*)浩Original
2019-05-09 14:44:007146Durchsuche

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)

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=&#39;01&#39; --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),&#39;未知&#39;)
-- 当然这不符合业务逻辑了

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!

Stellungnahme:
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