SQL一对多连接 - 如果在右表中至少存在一次值,则拒绝行

时间:2015-03-11 15:47:39

标签: sql relational-database inner-join

这是一个相当具体的问题,我无法从现有的教程和资源中找到答案。我试图在我们的存储库中找到音频文件的关系,以便为音频文件的迁移执行分类。理想情况下,我想为每个现有记录找到Production Master文件,然后将其作为迁移的源文件。但是,已知有没有生成制作大师的录音的例子。在这些情况下,我们希望能够确定存在哪些类型的文件以及哪些生成(存档,可交付或两者都不存在)。为了进一步复杂化,在音频文件本身中找不到关系,而是将METS文件全部链接在一起。为了找到这个,我必须使用链接三个表的查询 - TEXT_METADATA(用于METS记录),OWNER_ACCESS_TO_OBJECTS(用于音频文件及其指定的角色和mimetypes),以及RELATIONSHIP_MAP(用于确定父文件和子文件的关系) 。 METS文件是父文件(B对象),音频文件是子文件(A对象)。

到目前为止,我构建了这个查询,以便根据" AUDIO_SIP"的描述符类型查找所有METS文件及其相关的音频文件。 (所有基于音频的METS文件)。最后一行是尝试根据没有相关生产主数据的METS记录来限制结果。

Select * 
from 
   REPOSITORY.TEXT_METADATA rt, 
   REPOSITORY.RELATIONSHIP_MAP rm
where 
   rt.DESCRIPTOR_TYPE='AUDIO_SIP' and 
   rm.B_OBJECT_ID=rt.OBJECT_ID and
   rm.A_OBJECT_ID in (select ro.OBJECT_ID 
                      from REPOSITORY.OWNER_ACCESS_TO_OBJECTS ro 
                      where ro.ROLE<>'PRODUCTION_MASTER)

当然,这里的问题是它返回一个没有Production Master的行,无论它与METS文件的关系如何,所以这没用。我绝对难以理解如何继续说&#34;返回所有B_OBJECT_IDS和关联的A_OBJECT_IDS,其中没有与B_OBJECT_ID链接的生产主数据。合理?如果我需要澄清,请告诉我。非常感谢任何帮助。

0 个答案:

没有答案