2017-06-23 44 views
1

我有一個查詢,如下所示:使用表連接創建簡單更新查詢?

SELECT 
    c.LastName 
,c.FirstName 
,c.ClientStatusULink 
FROM Client c 
    JOIN Vets_Active_Clients vac ON vac.Clientid = c.ClientID 

導致一些數據:

LastName FirstName ClientStatusULink 
-------- --------- ----------------- 
Battle Jr Sam   10000000 
Bauder  Bill  10000000 
Sabir  Mo   10000000 

我需要創建一個更新查詢更新「ClientStatusULink」到「333」。我有以下更新查詢,但它永遠運行。這有什麼問題?

UPDATE Client 
SET ClientStatusULink = '333' 
FROM Client c 
    JOIN Vets_Active_Clients vac ON vac.Clientid = c.ClientID 

謝謝

+0

@ISHIDA的條件是在JOIN。 –

+2

附註:這是很好的做法,明確規定那種加入的,在這種情況下,「INNER JOIN」,就這樣有機率爲零混亂。習慣上使用你在UPDATE中定義的別名(「UPDATE c」)。另外:桌子上是否有觸發器?大量的索引?任何索引?這將基本上更新已在Vets_Active_Clients相關聯行在客戶端的所有行......如果有一噸的行,它會需要一段時間。 – pmbAustin

+0

@pbmAustin - 謝謝。我明確了JOIN到腸子JOIN和使用我的UPDATE語句的別名(從更新客戶端更新C)。再次運行,它的工作! – DataCrypt

回答

4

您需要使用在from定義別名:

UPDATE c 
    SET ClientStatusULink = '333' 
    FROM Client c JOIN 
     Vets_Active_Clients vac 
     ON vac.Clientid = c.ClientID; 

如果不使用在FROM定義的別名,然後在UPDATE引用ClientFROM條款不同的參考 - 它本質上是一個自交聯接。

+0

打了我一分! – Vnge

0

查詢是正確的。 也許客戶端表正在使用中。您可以在活動監視器中查看它並查找哪個查詢被阻止的客戶端表。 ,可能會導致這類問題的另一個原因是,你的表是巨大的。

+0

謝謝您的驗證。也許它正在使用中,但似乎我需要使用FROM語句中使用的別名。我根據其他答覆中的說明做出了這些細微的更改,並且它正確而迅速地運行。親切的問候。 – DataCrypt

1

嘗試使用別名爲您的加盟:

UPDATE c 
SET ClientStatusULink = '333' 
FROM Client c 
    JOIN Vets_Active_Clients vac ON vac.Clientid = c.ClientID