2009-03-02 54 views
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); 

,它顯然是行不通的,因爲沒有「從」在更新。

編輯>我使用的是MySQL

+0

DB什麼您使用的是? – geofftnz 2009-03-02 22:44:02

回答

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 
) 
+0

謝謝,這個工作完美。 – 2009-03-03 00:56:42

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) 

參見:

SQL update from one Table to another based on a ID match

+0

這不適用於MySQL。 – Quassnoi 2009-03-02 23:19:11

+0

回答之前他編輯說MySQL - 我可能應該猜到 – MikeW 2009-03-03 08:59:53

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

即使對於單個表,我也可以使用此樣式 - 以便所有UPDATE語句保持一致,並且稍後可以輕鬆地添加JOINed表。通常使用「U」作爲正在更新的表的別名: UPDATE U SET Col1 = 1 FROM MyTable1 AS U JOIN MyTable2 ON T2_ID = U.ID – Kristen 2009-03-02 23:17:54

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)