Question

J'ai la requête suivante:

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);

qui recherche les enregistrements de statut 5 dans une ville particulière âgés de plus de 6 mois (dont la date est stockée dans LA). Cela renvoie environ 4k résultats. Je souhaite mettre à jour la valeur du statut sur 1 pour chacun de ces enregistrements. Ma mise à jour ressemble à ceci:

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);

mais il se bloque et verrouille la base de données. Je soupçonne qu'il y a un problème car il n'y a pas de jointure, mais j'essaie quelque chose comme:

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);

et cela ne fonctionnera évidemment pas car il n'y a pas de "de" dans une mise à jour.

modifier > J'utilise MySQL

Était-ce utile?

La solution

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
)

Autres conseils

Pour MySQL , vous pouvez utiliser l'ancienne syntaxe de jointure:

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)

Je voudrais faire ceci:

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)

Voir aussi:

à un autre en fonction d'un identifiant correspondant

Dans SQL Server 2005, cela fonctionnera:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top