Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于多对多关系选择的SQL查询_Mysql_Sql_Many To Many - Fatal编程技术网

Mysql 基于多对多关系选择的SQL查询

Mysql 基于多对多关系选择的SQL查询,mysql,sql,many-to-many,Mysql,Sql,Many To Many,这确实是一个由两部分组成的问题,但为了避免混淆,我将分为两个实际问题。这是关于创建正确的SQL语句,以便根据多对多相关表中的值选择行: 现在,问题是:获取所有资源的最简单方法是什么,例如元数据。category=主题,以及该类别对应的元数据。value='introduction' 我相信这可以用很多不同的方法来完成,但我是SQL的新手,所以请提供最简单的方法。。。(如果你能用简单的英语简单描述一下这句话的意思,那也太好了。我已经看过了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,而不是选择*