2

私は次のクエリを持っています:

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

これは、6か月(LAに保存されている日付)より古い特定の都市のステータス5のレコードを検索します。これにより、約4kの結果が返されます。これらの各レコードのステータスの値を1に更新したいので、更新は次のようになります。

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

しかし、それは失速し、データベースをロックします。結合がないため問題があると思いますが、次のように試します。

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

更新には「from」がないため、明らかに機能しません。

編集>MySQLを使用しています

4

4 に答える 4

7
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
)
于 2009-03-02T22:45:02.797 に答える
3

の場合MySQL、古い結合構文を使用できます。

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)
于 2009-03-02T23:14:49.310 に答える
1

私はこれを行います:

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)

参照:

IDの一致に基づいた1つのテーブルから別のテーブルへのSQL更新

于 2009-03-02T22:42:21.510 に答える
1

SQL Server 2005 では、次のように動作します。

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);
于 2009-03-02T23:02:33.160 に答える