这实际上是一个由两部分组成的问题,但为了不混淆,我将分为两个实际问题。这个是关于创建正确的SQL语句,用于根据多对多相关表中的值选择行:
现在,问题是:获取所有resources
的绝对最简单方法是什么,例如metadata.category
=主题和哪个类别对应metadata.value
='介绍'?
我确信这可以通过很多不同的方式完成,但我是SQL的新手,所以请尽可能提供最简单的方法......(如果你能用简单的英语简要描述一下这句话的含义这也很棒。我已经看过SQL的介绍,但我找到的(对于初学者)都没有进入这些多对多的选择。)
答案 0 :(得分:1)
最简单的方法是使用EXISTS
子句。我对MSSQL比较熟悉,但这应该很接近
SELECT *
FROM resources r
WHERE EXISTS (
SELECT *
FROM metadata_resources mr
INNER JOIN metadata m ON (mr.metadata_id = m.id)
WHERE mr.resource_id = r.id AND m.category = 'subject' AND m.value = 'introduction'
)
翻译成英文,它'返回我所有记录,其中此子查询返回一行或多行,而不返回这些行的数据'。此子查询通过谓词mr.resource_id = r.id
与外部查询相关联,谓词EXIST
使用外部行作为谓词值。
我相信你可以浏览一下{{1}}声明的更多例子