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

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top