Wie trete ich Tabellen an einem Update
-
03-07-2019 - |
Frage
Ich habe die folgende Abfrage:
select count(L.ID)
from LA inner join L on (LA.leadid = L.ID)
where L.status = 5
and L.city = "cityname"
and Date(LA.Datetime) < Date_Sub(Now(), INTERVAL 6 MONTH);
, die für Datensätze mit Status 5 in einer bestimmten Stadt sucht, die älter als 6 Monate (das Datum, für die in LA gespeichert). Das gibt zu 4k Ergebnisse. Ich möchte den Wert des Status 1 auf jedem dieser Datensätze aktualisieren, und so mein Update wie folgt aussieht:
update L, LA
set L.status = 1
where L.status = 5
and L.city = "cityname"
and Date(LA.SomeDatetime) < Date_Sub(Now(), INTERVAL 6 MONTH);
aber es Stände und sperrt den db. Ich vermute, es ist ein Problem, weil es keine beitreten, aber ich versuche, so etwas wie:
update L, LA
from L inner join LA on (L.OID = LA.leadid)
set L.status = 1
where L.status = 5
and L.syscity = "cityname"
and Date(LA.SomeDatetime) < Date_Sub(Now(), INTERVAL 6 MONTH);
und es wird offensichtlich nicht funktionieren, da es keine ‚von‘ in einem Update ist.
Bearbeiten> Ich verwende MySQL
Lösung
update L
set L.status = 1
where L.status = 5
and L.city = "cityname"
and EXISTS (
select * from LA
where Date(LA.SomeDatetime) < Date_Sub(Now(), INTERVAL 6 MONTH)
and LA.leadid = L.ID
)
Andere Tipps
Für MySQL
, können Sie alte verwenden Join-Syntax:
UPDATE l, la
SET l.status = 1
WHERE l.status = 5
AND l.city = "cityname"
AND la.leadid = l.id
AND DATE(la.datetime) < DATE_SUB(NOW(), INTERVAL 6 MONTH)
Ich würde dies tun:
update L
set status = 1
from LA
where L.OID = LA.leadid
and L.status = 5
and L.syscity = "cityname"
and Date(LA.SomeDatetime) < Date_Sub(Now(), INTERVAL 6 MONTH)
Siehe auch:
SQL-Update von einer Tabelle zu einem anderen basierend auf einer ID-Übereinstimmung
In SQL Server 2005 dies funktionieren wird:
Update L
set L.status = 1
from
L
--
JOIN LA
on (LA.leadid = L.id)
where
L.status = 5
and L.city = "cityname"
and Date(LA.Datetime) < Date_Sub(Now(), INTERVAL 6 MONTH);