0

一点背景:

在这个项目中,我试图组合从不同应用程序中获取的 2 个表。

其中一个应用程序给了我几个表,我已经成功地将它们组合成一个表:

DB_Total 

另一个应用程序给了我一个只有标记名的表。此表称为:

TagNames_EA

现在,我想将“TagNames_EA”表中的“Name”列添加到“DB_Total”表中,以便比较“Name”字段中的值。

到目前为止,我有这段代码来比较和过滤掉不匹配的名称:

SELECT
    d.Address,
    d.Type,
    d.Name,
    IIf(t.Name Is Null, False, True) AS match_found
FROM
    DB_Total AS d
    LEFT JOIN TagNames_EA AS t
    ON d.Name = t.Name;

这很好用,但我还想查看 DB_Total 表中 TagNames_EA 表中的“名称”值。


我知道可以使用

ALTER TABLE DB_Total
ADD Names_EA

但是,当我尝试这个时:

ALTER TABLE DB_Total
ADD Names FROM TagNames_EA AS Names_EA

这没用

是否有捷径可寻?

编辑:我试图简化我解释我的情况的方式。

编辑2:示例

在“DB_Total”表中,我有一个名称列表,它应该与“EA_Names”表中的名称完全相同。

DB_Total:
     Name
S1\SVS_AK\ENA[3]
S1\SVS_AK\ENA[4]
S1\SVS_AK\ENA[5]
S1\SVS_AK\ENA[6]
S1\SVS_AK\ENA[7]
S1\SVS_AK\ENA[8]

但是,有时会出错,我想检查是否有不匹配的名称。像这样:

TagNames_EA
    Name
S1\SVS_AK\ENA[3]
S1\SVS_AK\ENA[4]
S1\SVS_AK\ENA[5]
S1\SVS_AK\EMA[6]  <--- This is a Mistake and will come up as a mismatch
S1\SVS_AK\ENA[7]
S1\SVS_AK\ENA[8]

目前,我使用的代码向我的 DB_Total 表添加了一个新列,其值为“-1”(用于匹配)或值“0”(用于没有匹配的名称)

看起来像这样:

DB_Total:               
     Name               match_found
S1\SVS_AK\ENA[3]            -1
S1\SVS_AK\ENA[4]            -1
S1\SVS_AK\ENA[5]            -1
S1\SVS_AK\ENA[6]             0
S1\SVS_AK\ENA[7]            -1
S1\SVS_AK\ENA[8]            -1

我想要完成的是一个包含以下内容的表格:

DB_Total:               
     Name                 Names_EA       match_found
S1\SVS_AK\ENA[3]     S1\SVS_AK\ENA[3]        -1
S1\SVS_AK\ENA[4]     S1\SVS_AK\ENA[4]        -1
S1\SVS_AK\ENA[5]     S1\SVS_AK\ENA[5]        -1
S1\SVS_AK\ENA[6]     S1\SVS_AK\EMA[6]         0
S1\SVS_AK\ENA[7]     S1\SVS_AK\ENA[7]        -1
S1\SVS_AK\ENA[8]     S1\SVS_AK\ENA[8]        -1

在乔发表评论之后,如果我还想在同一个表中查看 EA_Table 的名称值,我开始怀疑这是正确的方法。

4

2 回答 2

1

您的 ALTER 语句当然行不通。您通常会首先添加一个可以为 NULL 的空列,然后使用第二条INSERT语句来填充数据。但是,除了 name 之外,您还必须有另一列来定义 _EA 表中的值对 DB_Total 表的作用,否则您将无法 100% 确定您匹配两者中的正确行表。

您可以尝试以下方法来获得我认为您想要的结果:

选择
    d.地址,
    d.类型,
    d.姓名,
    t.name,
    IIf(t.Name Is Null, False, True) AS match_found
从
    DB_Total AS d
    左连接 TagNames_EA AS t
    ON d.Name = t.Name;

这应该会显示您两个相邻的名称结果。但是,如果您有一些明确的 ID 值来确保您确实拥有正确匹配的行,则可能会更容易。

于 2013-02-21T09:18:16.957 回答
1
SELECT
    d.Address,
    d.Type,
    d.Name,
    IIf(t.Name Is Null, False, True) AS match_found,
    t.name as name_ea
FROM
    DB_Total AS d
    FULL OUTER JOIN JOIN TagNames_EA AS t
    ON d.Name = t.Name;

这给了你不匹配;但是,它实际上并没有向您显示哪个匹配项-稍后由您决定哪个匹配项。

于 2013-02-21T13:58:28.467 回答