Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
Sql server 如何使用单个查询从多个多对多关系表中获取数据_Sql Server - Fatal编程技术网

Sql server 如何使用单个查询从多个多对多关系表中获取数据

Sql server 如何使用单个查询从多个多对多关系表中获取数据,sql-server,Sql Server,我的数据库中有这个表场景。我希望使用表单名在单个查询中从所有这些表中提取数据,并且表单名是唯一的。我不知道还有多少与formNumber相关的数据。我尝试使用以下查询,但没有得到结果 select [FormNumber], [FormName], [ProcedureName] ,[MethodName], [DeptName], [SectionName] FROM FormDetail AS fd INNER JOIN FormMaster AS fp ON fd.

我的数据库中有这个表场景。我希望使用表单名在单个查询中从所有这些表中提取数据,并且表单名是唯一的。我不知道还有多少与formNumber相关的数据。我尝试使用以下查询,但没有得到结果

select [FormNumber], [FormName], [ProcedureName] ,[MethodName], [DeptName], [SectionName]
            FROM FormDetail AS fd INNER JOIN FormMaster AS fp ON fd.[FormId] = fp.[FormId]
            INNER JOIN FProcedure AS fpr ON fp.[ProcId] = fpr.[ProcId]   
            INNER JOIN FMethod AS fm ON fp.[MethodId] = fm.[MethodId]
            INNER JOIN FDepartment AS fdp ON fp.[DeptId] = fdp.[DeptId]
            INNER JOIN FSection AS fs ON fp.[SecId] = fs.[SecId]
            WHERE [FormNumber] = '1026 -3'
我得到了以下结果


它返回正确的结果,但与所有其他记录重复数据。例如,如果有两个部门和12个部门,那么它将首先用12个部门填充第一个部门,然后再用所有部门填充第二个部门。我希望它不要重复这一点,例如,如果只有两个部门,它只获取两个,12个部分,12个部分,不与其他数据重复。

由于您将所有多对多映射保留在一个表中,我相信您需要为每个映射执行子查询。在下面的示例中,我只有三个名称相似的表,但通过添加子查询并为子查询id和表单id添加条件,查询很容易扩展。我还使用distinct以避免重复

SELECT distinct number, mq.name AS method_name, pq.name AS proc_name
FROM form f, master m,
(SELECT m.fid as id, name FROM master m JOIN proc p ON m.pid = p.id) AS pq,
(SELECT m.fid as id, name FROM master m join method me ON m.mid = me.id) AS mq
WHERE m.fid = f.id
  AND pq.id = f.id
  AND mq.id = f.id

使用distinct如“select distinct…”@JoakimDanielson我曾使用过,但它不起作用。我是否正确理解所有多对多关系都存储在FormMaster上?如果是,那么该表的外观、结构和数据如何?@JoakimDanielson Form Master table包含所有表主键作为外键,如果一个表有数据,而其他表没有数据,则只有一个表将填充,其他表的其余部分为空