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