如何编写Access SQL查询,根据表A的字段值动态关联对应表并获取姓名信息
如何编写Access SQL查询,根据表A的字段值动态关联对应表并获取姓名信息
嗨,这个需求我熟!你想要的是根据表A里的tbl字段值,自动匹配到对应的B、C、D表,然后取出对应的姓名和姓氏数据,对吧?咱们直接上解决方案,先理清楚逻辑再写SQL。
首先明确你的表结构(我把你给的表转成更清晰的Markdown格式):
表结构说明
表A
| ID_A | tbl | sogg_ID |
|---|---|---|
| 55 | 1 | 22 |
| 55 | 2 | 12 |
| 7 | 3 | 8 |
表B(tbl=1时关联)
| ID_B | Nome_B | Cogn_B |
|---|---|---|
| 22 | Luca | Rossi |
| 15 | Mario | Verdi |
| 8 | Antonio | Belli |
表C(tbl=2时关联)
| ID_C | Nome_C | Cogn_C |
|---|---|---|
| 3 | Sergio | Bianchi |
| 12 | Simone | Ferrari |
| 10 | Arianna | Ricci |
表D(tbl=3时关联)
| ID_D | Nome_D | Cogn_D |
|---|---|---|
| 21 | Giulio | Sala |
| 7 | Sofia | Russo |
| 14 | Luca | Viola |
核心逻辑是:表A的tbl字段值决定了要关联的目标表,sogg_ID对应目标表的ID字段(比如tbl=1时,sogg_ID对应表B的ID_B)。
实现的SQL查询
我们可以用UNION ALL来分别处理三种tbl的情况,然后合并结果,最后加上ID_A的过滤条件:
SELECT b.Nome_B AS Nome, b.Cogn_B AS Cogn FROM A INNER JOIN B ON A.sogg_ID = B.ID_B WHERE A.tbl = 1 AND A.ID_A = 55 UNION ALL SELECT c.Nome_C AS Nome, c.Cogn_C AS Cogn FROM A INNER JOIN C ON A.sogg_ID = C.ID_C WHERE A.tbl = 2 AND A.ID_A = 55 UNION ALL SELECT d.Nome_D AS Nome, d.Cogn_D AS Cogn FROM A INNER JOIN D ON A.sogg_ID = D.ID_D WHERE A.tbl = 3 AND A.ID_A = 55
代码解释
- 第一个
SELECT块:专门处理表A中tbl=1的记录,关联表B,取出对应的姓名和姓氏,并统一别名成Nome和Cogn,方便结果统一展示。 - 第二个
SELECT块:处理tbl=2的记录,关联表C,同样统一字段别名。 - 第三个
SELECT块:处理tbl=3的记录,关联表D。 UNION ALL用来把三个查询的结果合并成一个数据集,这样就得到了对应ID_A的所有匹配记录。
如果需要更灵活的查询(比如动态输入ID_A),可以把55换成Access参数,比如[请输入要查询的ID_A:],这样运行查询时会弹出输入框让你指定ID值。
测试结果
当你执行上述SQL(WHERE A.ID_A=55)时,会得到如下结果:
| Nome | Cogn |
|---|---|
| Luca | Rossi |
| Simone | Ferrari |
完全符合你想要的输出!
备注:内容来源于stack exchange,提问作者sp64
相关产品推荐
相关产品推荐

