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;