2015-08-13 75 views
0

我試圖放在一起更新表中的字段的查詢。我試圖運行一個給我一個數字的子選擇查詢,然後使用該子查詢產生的數字作爲更新查詢條件的一部分。使用select語句作爲更新查詢的條件

USE EMMS 
Update [2_import_VZW_tbl_SMTN] 
    set [2_import_VZW_tbl_SMTN].[Client_ID] =[tbl_Foundation_Account].[Client_ID] 
where ([tbl_Foundation_Account].[Foundation_Account_ID] = 
      (Select TOP 1 tbl_Foundation_Account.Foundation_Account_ID 
      FROM tbl_Foundation_Account 
       INNER JOIN [2_Import_tbl_AWCDSU] 
        ON tbl_Foundation_Account.Foundation_Account_ID = 
        [2_Import_tbl_AWCDSU].[ECPD Profile ID])) 

我的問題是我不斷收到此錯誤

多部分組成的標識符 tbl_Foundation_Account.Foundation_Account_ID」無法綁定。

我使用子查詢不正確?當我之前收到這個錯誤時,這是​​因爲表或字段名稱有些模棱兩可,但是這次我檢查了所有這些,它應該沒問題。任何人都可以解釋我犯了什麼SQL罪?

+2

tbl_Foundation_Account列在子查詢之外不可用。 – jarlh

+1

你會如何加入一個選擇查詢所有這三個表在您的更新語句有三個表的時刻,但你只有兩個表如何表'2_import_VZW_tbl_SMTN'是與任何其他兩個表的'2_Import_tbl_AWCDSU'或之間定義的關係'tbl_Foundation_Account'。 –

+0

你有一個以數字開頭的表名,以及一個帶空格的列名?這是什麼 ? – thomasb

回答

0

另一張海報較早提交了此答案,但隨後將其刪除。在刪除它之前,我可以嘗試它,它的工作原理正是我需要它的工作原理。除非別人能告訴我爲什麼這是一個糟糕的想法,否則我會用它作爲正確的答案。

USE EMMS 
Update [2_import_VZW_tbl_SMTN] 
    set [2_import_VZW_tbl_SMTN].[Client_ID] = [tbl_Foundation_Account].[Client_ID] 
from [tbl_Foundation_Account] 
where ([tbl_Foundation_Account].[Foundation_Account_ID] = 
      (Select TOP 1 tbl_Foundation_Account.Foundation_Account_ID 
      FROM tbl_Foundation_Account 
      INNER JOIN [2_Import_tbl_AWCDSU] 
      ON tbl_Foundation_Account.Foundation_Account_ID = [2_Import_tbl_AWCDSU].[ECPD Profile ID])) 
+0

這是@dasblinkenlight給出的答案 –

1

在錯誤

多部分標識符 tbl_Foundation_Account.Foundation_Account_ID」不能被約束。

這是因爲表列[tbl_Foundation_Account].[Client_ID]不在範圍存在外部UPDATE查詢 外部查詢僅有的一個表格是[2_import_VZW_tbl_SMTN],它沒有像0這樣的列。 這就好比有一個錯字或類似寫專欄的名字,你說

當我以前收到此錯誤,它已經因爲在表或字段名稱一些 歧義

請嘗試下面的查詢。 請注意,我用的內部查詢語法,並確保單值由內部查詢使用

select top 1 [Client_ID] 

返回。查詢語法的其餘部分是相同的。

USE EMMS 

Update [2_import_VZW_tbl_SMTN] 
set [2_import_VZW_tbl_SMTN].[Client_ID] = 
        ( 
         select top 1 [Client_ID] 
          from [tbl_Foundation_Account] 
         where [Foundation_Account_ID] = 
          (
          Select TOP 1 a.Foundation_Account_ID 
           FROM tbl_Foundation_Account a 
          INNER JOIN [2_Import_tbl_AWCDSU] b 
            ON a.Foundation_Account_ID = b.[ECPD Profile ID] 
          ) 
        )