我在我的数据库中有这个表格场景。我想使用表单名称在单个查询中从所有这些表中获取数据,它是唯一的。我不知道有多少与formNumber相关的其他数据。我尝试使用FolloWing查询,但我没有得到结果。
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'
我得到了以下结果
返回正确的结果,但它会重复所有其他记录的数据。 E.G如果有两个部门和十二个部分,那么它将首先填充第一部门的12部分,然后再填充所有部分的第二部分。我希望它不重复E.g如果只有两个部门,它只获取两个部分而12个部分只有12个部分不会重复另一个数据。
答案 0 :(得分:0)
由于您在一个表中保留所有多对多映射,我相信您需要为每个映射执行子查询。在下面的示例中,我只有三个具有相似名称的表,但通过添加子查询以及为子查询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