كيف يمكنني ربط الجداول على تحديث
-
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 أشهر (تاريخ التي يتم تخزينها في LA). هذا يعود عن 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);
وسيكون من الواضح أن لا يعمل لأنه لا يوجد 'من' في التحديث.
وتحرير> أنا باستخدام الخلية
المحلول
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