Как мне присоединиться к таблицам при обновлении
-
03-07-2019 - |
Вопрос
У меня есть следующий запрос:
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);
который ищет записи со статусом 5 в определенном городе старше 6 месяцев (дата которых хранится в Лос-Анджелесе).Это возвращает около 4 тыс. результатов.Я хотел бы обновить значение статуса до 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);
и это, очевидно, не будет работать, потому что в обновлении нет слова «от».
редактировать> Я использую 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 из одной таблицы в другую на основе совпадения идентификатора
В 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);