SQL查询根据多对多关系进行选择

时间:2014-01-24 23:33:38

标签: mysql sql many-to-many

这实际上是一个由两部分组成的问题,但为了不混淆,我将分为两个实际问题。这个是关于创建正确的SQL语句,用于根据多对多相关表中的值选择行:

enter image description here

现在,问题是:获取所有resources的绝对最简单方法是什么,例如metadata.category =主题和哪个类别对应metadata.value ='介绍'?

我确信这可以通过很多不同的方式完成,但我是SQL的新手,所以请尽可能提供最简单的方法......(如果你能用简单的英语简要描述一下这句话的含义这也很棒。我已经看过SQL的介绍,但我找到的(对于初学者)都没有进入这些多对多的选择。)

1 个答案:

答案 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}}声明的更多例子