【发布时间】:2019-04-26 01:25:05
【问题描述】:
我已经为此苦苦挣扎了几天了,我已经无计可施了。
我有 3 个需要比较的数据集 - 第一个表包含 Part_ID 列表,然后是其他两个可能/可能不包含相同 ID 的数据集(“dataTables”)(对应的列存在于这两个表中,但是该值可能不是)。
我需要查看表 1 中的每个值(我们称之为 keyTable),看看它是否存在于任一 dataTables 中,然后如果匹配,则从 dataTables 中的列中获取值,称为“定义” ' 并将其粘贴在 keyTable 中名为 'def_exists' 的列中,与 Part_ID 位于同一行。
我尝试了各种 SQL 查询,包括 DISTINCT 和嵌套的 SELECT 函数,但都没有成功。我能够将 keyTable 中的 Part_ID 字段与 dataTables 之一匹配并正确附加“定义”值,但我无法删除重复项,因为 Part_ID 和定义之间存在一对多关系dataTable,我最终得到了超过一百万个重复项(keyTable 是 ~16k 记录,Query 返回 ~1.6m)。尝试一次查询所有三个表最终得到 1.25 亿多条记录。
我希望举个例子说明我正在努力实现的目标,因为它可能听起来有点模糊或令人困惑。
键表
ID Part_ID Random_Info Def_Exists_1 Def_Exists_2
1 ABC123 Bla
2 BCD234 Bla
3 CDE345 Bla
4 DEF456 Bla
5 EFG567 Bla
6 FGH678 Bla
数据表1
ID Part_ID Definition
1 ABC123 A1
2 ABC123 A2
3 ABC123 A3
4 ABC123 A4
5 BCD234 B1
7 BCD234 B2
8 BCD234 B3
9 CDE345 C1
10 CDE345 C2
数据表2
ID Part_ID Definition
1 DEF456 D1
2 DEF456 D2
3 DEF456 D3
4 EFG567 E1
5 EFG567 E2
6 EFG567 E3
7 FGH678 F1
8 FGH678 F2
9 FGH678 F3
所需的输出 键表
ID Part_ID Random_Info Def_Exists_1 Def_Exists_2
1 ABC123 Bla A1
2 BCD234 Bla B1
3 CDE345 Bla C1
4 DEF456 Bla D1
5 EFG567 Bla E1
6 FGH678 Bla F1
我希望示例表能更清楚地说明这一点。如果有多个匹配项,即 DEF456 的 D1、D2、D3,我只想显示第一条记录,或者甚至只是纯文本中的“是”。
我还需要在正确的列中显示“是”或定义,即 dataTable1 = Def_Exists_1,dataTable2 = Def_Exists_2。
任何帮助都会很棒,我觉得我已经在网上搜索了解决方案,但没有人知道 - 无论是那个还是我的 SQL 仍然生锈(这很可能)。
【问题讨论】:
标签: sql vba database ms-access select