我试图根据与另一个表的匹配更新表,获得多部分标识符错误

时间:2016-04-28 20:33:22

标签: sql sql-server

我遇到一个问题,即当匹配不存在时,尝试使用另一个表中的值更新表。这是场景,我有一个参与表,有大约250K记录。我需要根据zip + 4代码找到与记录相关的立法区。我的参与表有zip和zip4代码。有时候我有两种,有时也没有。一定要喜欢这样的数据集。我有第二张表,其中包含9位邮政编码的所有立法区。我已经更新了数据集并包含了单独的zip和zip4代码。 这是我的代码:

update 
        [ComEd].[dbo].[PP_FFR_BU]
set
        [Zip4] =
(
    CASE
        when
            [Tim].[dbo].[PP_FFR_BU].[Zip] + [Tim].[dbo].[PP_FFR_BU].[Zip4] not in (select zip from [TimCIS].[dbo].[Legis_Districts])
        then 
        CASE
            when [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5] and [Tim].[dbo].[PP_FFR_BU].[Zip4] <> [TimCIS].[dbo].[Legis_Districts].[Zip4]
            then (select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts] where [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5])
            when len([Tim].[dbo].[PP_FFR_BU].[Zip])<5 
            then '0000'
        end
    end
)
where 
    [Tim].[dbo].[PP_FFR_BU].[Zip] + [Tim].[dbo].[PP_FFR_BU].[Zip4] not in (select zip from [TimCIS].[dbo].[Legis_Districts])

现在我收到一个错误:

  

Msg 4104,Level 16,State 1,Line 11   无法绑定多部分标识符“TimCIS.dbo.Legis_Districts.Zip4”。这相当于第二个CASE语句中的when子句。

如果原始表中的zip和zip4在立法区表中,那么我需要移动到下一条记录。如果zip在表中并且zip4不匹配,我需要匹配的第一个值。如果立法表中不存在zip,那么我想在参与表的zip4中放置一个'0000'。任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

在case语句中,您有这个查询:

then (select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts] where [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5])

但这部分没有意义:

select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts]

您正在从表中选择一个不在from子句中的列。它们位于两个不同的数据库中。