如下表所示,该表Recording
包含三个外键,任何一个条目都只会填充其中一个。我的问题是如何在 Access 中格式化一个 select 语句,它只会在给定该表的外键的情况下从相关表中提取名称?
我尝试使用 IIf,它在 SELECT 后检查哪个外键不为空时有效:
SELECT Recording.[idRecording],
IIf(Recording.[Artist_idArtist] Is Not Null,
Artist.[artName] ,
IIf(Recording.[Band_idBand] is Not Null,
Band.[bName],
Composer.[cName]))
FROM ...
但是在 FROM 语句之后放置任何条件以获得正确的 JOIN 会导致错误:
FROM
IIf(Recording.[Artist_idArtist] Is Not Null,
Artist INNER JOIN Recording ON Recording.[Artist_idArtist] = Artist.[idArtist],
IIf(Recording.Band_idBand Is Not Null,
Band INNER JOIN Recording ON Recording.[Band_idBand] = Band.[idBand],
Composer INNER JOIN Recording ON Recording.[Composer_idComposer] = Composer.[idComposer]));
我是新手,所以我可能遗漏了一些明显的东西,或者以错误的方式处理它。我相信我在这里最终得到的是独家弧线?我不确定这是否是一个好的设计,我曾想过废弃 Recording 表并简单地将外键添加到 Track。
这里的参考是关系设计: