Sql 将现有列添加到现有表MS_Access

Sql 将现有列添加到现有表MS_Access,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,一点背景: 在这个项目中,我试图将我从不同应用程序中获取的两个表组合起来 其中一个应用程序为我提供了几个表,我已成功地将这些表合并为一个表: DB_Total 另一个应用程序为我提供了一个只有标记名的表。此表称为: TagNames_EA 现在,我想将“TagNames_EA”表中的“Name”列添加到“DB_Total”表中,以便比较“Name”字段中的值 到目前为止,我有以下代码来比较和过滤不匹配的名称: SELECT d.Address, d.Type, d

一点背景:

在这个项目中,我试图将我从不同应用程序中获取的两个表组合起来

其中一个应用程序为我提供了几个表,我已成功地将这些表合并为一个表:

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表中标记名EA表中的“Name”值


我知道可以使用

ALTER TABLE DB_Total
ADD Names_EA
但是,当我尝试这样做时:

ALTER TABLE DB_Total
ADD Names FROM TagNames_EA AS Names_EA
它不起作用

有没有一个简单的方法可以做到这一点

编辑:我试图简化我解释自己处境的方式

编辑2:举例

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

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

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:               
     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

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

您的ALTER语句当然行不通。通常首先添加一个空的可空列,然后使用第二个
INSERT
语句填充数据。但是,您必须有另一列,而不是name,该列应该定义从_EA表到DB_Total表的值,否则您将无法100%肯定地保证匹配两个表中的正确行

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

SELECT d.Address, d.Type, d.Name, t.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; 挑选 d、 地址:, d、 类型, d、 名字, t、 名字, 找到匹配项时的IIf(t.Name为Null、False、True) 从…起 DB_总计为d 左连接标记名\u EA AS t d.名称=t.名称; 这将显示两个结果的名称。然而,如果您有一些明确的ID值来确保您确实拥有正确匹配的行,那么可能会更容易

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;

这给了你不匹配的结果;然而,它实际上并没有向您显示哪一个匹配到哪一个-这将取决于您以后确定哪一个对应。

我感到困惑。你是以名字加入的。因此,Tagnames_EA表中的名称已经存在了,它们与DB_Total表中的名称相同。你是在要求非匹配项也出现吗?我理解这种混乱,我会尽量让过去两周没有使用此数据库的人更清楚一点!目前,它在DB_Total表中添加了一个名为“match_found”的列,如果两个表中的名称匹配,“match_found”列中的相应字段返回“-1”,如果不匹配,它将返回一个“0”对不起,这没有帮助,因为我认为您不理解我的注释。根据上面发布的SQL代码,如果在标记名表中找到,则新表(如果从该选择创建)将包含DB_Total表的所有行,并带有一个指示符;但是没有第二个变量可以添加。你能给出每个表中数据的示例以及你想看到的结果吗?你将如何确定EMA行应该与ENA行匹配?您的联接当然无法完成此任务。此代码在选择指令中将t.name中的“t”提升为name_ea后生成错误。如果省略逗号,请重试。 SELECT d.Address, d.Type, d.Name, t.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;
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;