返回数千行冗余信息的大型MySQL语句

返回数千行冗余信息的大型MySQL语句,mysql,Mysql,我很清楚,我的问题是,我进行连接的方式导致大量信息被一次又一次地重复。我不知道的是要把它删掉: 发生的事情是,所有ON子句都是从一个表单动态生成的;下面的语句应该返回大约1500行;它返回32000 我不确定提供我的表关联是否有帮助;我有一种感觉,我只是一般错过了某个地方的一点,但如果需要更多的信息,请询问,我会提供 非常感谢你的帮助 SELECT `Appraisal`.`id` AS `Appraisal ID`, `Appraisal`.`modu

我很清楚,我的问题是,我进行连接的方式导致大量信息被一次又一次地重复。我不知道的是要把它删掉:

发生的事情是,所有ON子句都是从一个表单动态生成的;下面的语句应该返回大约1500行;它返回32000

我不确定提供我的表关联是否有帮助;我有一种感觉,我只是一般错过了某个地方的一点,但如果需要更多的信息,请询问,我会提供

非常感谢你的帮助

SELECT  `Appraisal`.`id` AS `Appraisal ID`,
                    `Appraisal`.`module_id` AS `Module ID`,
                    `Module`.`name` AS `Module Name`,
                    `Course`.`coursecode` AS `Course Code`,
                    `Appraisal`.`excerpt_id` AS `Excerpt ID`,
                    `Appraisal`.`user_id` AS `User ID`,
                    `Appraisal`.`attempt_id` AS `Attempt ID`,
                    `Excerpt`.`id` AS `Excerpt ID`,
                    `Appraisal`.`response` AS `Response (Y=1)`,
                    `Appraisal`.`correct` AS `Response Correct (c=1)`,
                    `Excerpt`.`type` AS `Excerpt Type`,
                    `Appraisal`.`confidence` AS `Confidence (n/100)`,
                    `Appraisal`.`time` AS `Response Time (ms)`,
                    `Institution`.`name` AS `Institution Name`
                     FROM `appraisals` AS `Appraisal`
                    JOIN `modules` AS `Module` ON (`Appraisal`.`module_id` = `Module`.`id`)
                    JOIN `users` AS `User` ON (`Appraisal`.`user_id` = `User`.`id`)
                    JOIN `users_courses` AS `UsersCourse` ON (`UsersCourse`.`user_id` = `User`.`id`)
                    JOIN `courses` AS `Course` ON (`UsersCourse`.`course_id` = `Course`.`id`)
                    JOIN `institutions` AS `Institution` ON (`Course`.`institution_id` = `Institution`.`id`)
                    JOIN `excerpts_modules` as `ExcerptsModule` ON (`Module`.`id` = `ExcerptsModule`.`module_id`)
                    JOIN `excerpts` as `Excerpt` ON (`ExcerptsModule`.`excerpt_id` = `Excerpt`.`id`)
                 WHERE `Institution`.`id` = '1' AND 
`Course`.`educator_id` = '2' AND 
`Course`.`id` IN ('1','2') AND 
`Module`.`id` = '1' AND 
`User`.`id` IN ('1','2','3','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28')
此外,如果它提供了一些上下文,ON子句都是由如下所示的HTML表单提供的:

使现代化 这是1个评估数据的屏幕上限;我现在计算出,每个评估都被重复了32次,尽管我确信32是一个数字,这要归功于上下文:

值得注意的是,机构栏被切断,响应时间栏和其他几个栏从未改变;我认为是摘录类型和其他类型的组合导致了问题。每个评估不能有多个摘录或摘录类型

小更新 当前的摘录模块表附带了30个摘录,因此,至少每个评估都加入了每个摘录。然而,应该只有一个。我不知道如何进行此约束,并且仍然包括单个摘录。没有该连接,连接摘录的下一行将无法成功。:/对于那些一直在帮助我的人,非常感谢,我肯定会把这件事告诉他们

最终更新已解决 多亏了下面的评论和我自己的一点推论性见解,这一问题通过三个步骤得以解决:

添加约束以防止某些联接表中出现重复; 我的一个连接设计得很糟糕,这是一个特定于上下文的问题;但是 在我修复了错误连接后,与我下面的评论相反的SELECT DISTINCT证明是关键的
感谢StackOverflow,如果允许,StackOverflow将在24小时内回答此问题,或者如果我的一位有帮助的评论者想要,我将删除此更新并标记为正确。

您的加入或期望是错误的。逐个删除连接,直到发现问题所在。复制的是什么?你能用分组方式吗SQL与DDL和一小部分示例数据的结合会很有用是的,这需要我几分钟的时间来整理,但我肯定会的,brb。查询乍一看很正常。我认为表之间的关系毕竟是必要的。要么缺少联接条件,要么就是数据太多。我开始回答,分析可能的原因,但这只是猜测,没有表结构。约束尤其重要。一个用户只能链接到一个课程,只要userid和courseid的组合在user_课程中是唯一的,或者可以有多个?其他表格也一样。这是一个非常方便的洞察;我确实发现了一些重复的课程。我不是SQL向导;这是我写过的最复杂的东西。我可以发布哪些更有用的信息?