我遇到了一个复杂的查询,我需要在其中实现一些业务逻辑。下面是我所拥有的表格(为了便于阅读,我省略了额外的列)
Team - TeamID, TeamName
TeamMember - MemberID, TeamID, MemberName
Question - QuestionID, CategoryID, DifficultyLevelID, Question
Category - CategoryID, CategoryName
DifficultyLevel - DifficultyLevelID, DifficultyLevelName
QuestionOffered - QuestionOfferedID, QuestionID, OfferedTo
现在,业务逻辑是,我有 10 个类别(如科学、历史、地理等)和 3 个难度级别(即简单、中等、困难)。每个类别和难度级别有 5 个问题。
所以每个类别有 3 x 5 = 15 个问题(5 简单,5 中等,5 困难)。总共 15 x 10(类别)= 150 个问题。
现在我希望每次用户进来时,我都会检查我是否已经提供(可以从 QuestionsOffered 表中跟踪)该类别和难度级别下的所有 5 个问题,如果是,那么我不会显示该类别和再次难度级别。
所以,假设我第一次来,我会得到所有的类别,然后选择一个类别,我会得到所有的难度级别。现在我选择 Easy 并继续。因此,在每个类别下,我可以选择 5 次特定的难度级别,然后在我完成所有 5 次简单后,我将获得类别和其他难度级别(即中等和困难)。
因此,通过这种方式,如果我完成了同一类别下的所有 5 个简单问题、5 个中等问题和 5 个困难问题,则该类别本身不会出现。
当然,我可以在用于填充类别的编程中实现此逻辑,但这最终会产生大量代码行。
那么有没有办法在 SQL 中检查这个业务逻辑呢?这样我才能得到数据来填充?