質問
次のクエリがあります:
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」がないため、明らかに動作しません。
編集&gt; MySQLを使用しています
解決
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
)
他のヒント
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)
これを行う:
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)
参照:
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);
所属していません StackOverflow