Mysql 基于多对多关系选择的SQL查询
这确实是一个由两部分组成的问题,但为了避免混淆,我将分为两个实际问题。这是关于创建正确的SQL语句,以便根据多对多相关表中的值选择行: 现在,问题是:获取所有Mysql 基于多对多关系选择的SQL查询,mysql,sql,many-to-many,Mysql,Sql,Many To Many,这确实是一个由两部分组成的问题,但为了避免混淆,我将分为两个实际问题。这是关于创建正确的SQL语句,以便根据多对多相关表中的值选择行: 现在,问题是:获取所有资源的最简单方法是什么,例如元数据。category=主题,以及该类别对应的元数据。value='introduction' 我相信这可以用很多不同的方法来完成,但我是SQL的新手,所以请提供最简单的方法。。。(如果你能用简单的英语简单描述一下这句话的意思,那也太好了。我已经看过了SQL的介绍,但是我发现(对于初学者)没有一个能进入这些多
资源的最简单方法是什么,例如元数据。category
=主题,以及该类别对应的元数据。value
='introduction'
我相信这可以用很多不同的方法来完成,但我是SQL的新手,所以请提供最简单的方法。。。(如果你能用简单的英语简单描述一下这句话的意思,那也太好了。我已经看过了SQL的介绍,但是我发现(对于初学者)没有一个能进入这些多对多的选择。)最简单的方法是使用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
语句的例子好的,谢谢,但我还没能让它工作。。。如果MSSQL和MySql之间存在差异,我不知道,但我无法修复它…您可以尝试删除别名并使用完全限定的表名(将r.x更改为resources.x,mr.x=metadata\u resources.x,等等)。我确信mysql支持exists子句,但您也可以尝试在exists中选择1,而不是选择*