2011-10-05 100 views
1

这里是情况,我作为当地学区的网络开发者工作,我的前任构建了一个自定义应用程序来跟踪孩子的考试成绩。我不是sql专家,所以我遵从主人!MS Access SQL语句

我有内置的MS Access下表:

  • 评估 - 这是首要类别的技能表(即数学,阅读等)
  • 技能 - 这些是单独的测试,并按评估分类ID
  • 掌握 - 学生成绩;目前显示的技能ID

下面,是我的表,因为他们现在。最后一张桌子就是我想要的。


评估表

asstID  asstName 
1   Math 
2   Reading 
3   Literature 

技能表

skillID  skillName asstID 
80   Vocabulary 3 
81   Addition 1 
82   Grammar  2 

通达表

masteryID stuID  score  skillID 
20   st001  89   82 
21   st001  96   81 
22   st001  100   80 
23   st002  88   81 
24   st002  74   80 
25   st002  99   82 

通达表 - 我想是什么。

masteryID stuID  score  skillID  asstID 
20   st001  89   82   2 
21   st001  96   81   1 
22   st001  100   80   3 
23   st002  88   81   1 
24   st002  74   80   3 
25   st002  99   82   2 

基本上,我有需要有asstID加入通达表一对夫妇一千名学生。

我正在寻找帮助创建一个SQL语句,我可以放入MS Access,它将显示与当前表中的skillID对应的asstID。

任何帮助表示赞赏。

请不要问为什么我们使用的MS Access,这正是他用时,他内置应用程序

+0

楼下,在答案中,我还说,我使用相应的信息来更新表中的ASP代码,以防万一别人运行到这样的问题。 – joshmax

回答

2
SELECT Mastery.masteryID, Mastery.stuID, Mastery.score, Mastery.skillID, Skills.asstID 
FROM Mastery 
    INNER JOIN Skills 
     ON Mastery.skillID = Skills.skillID; 

在查询设计器(QBE或按示例查询)网格,您需要添加精通表和技能表,并确保Mastery.SkillIDSkills.SkillID之间存在关系。

+0

感谢您的回答,我会在早上回到工作时看到这个。我会和你回去的。 – joshmax

+0

我可以通过查询设计器重新创建我的'tblMastery',所以我*可以*将查询结果复制到新表中,但我需要持续更新的永久解决方案。关于如何查询'tblMastery'里面'asstID' **的任何想法,以便每添加一行,都会添加'asstID'?或者这是否需要通过ASP代码中的SQL(在应用程序本身中)添加? – joshmax

+0

我将我的'tblMastery.asstID'列中的SQL更改为'SELECT tblSkills.asstID FROM tblMastery INNER JOIN tblSkills ON tblMastery.skillID = tblSkills.skillID;',并且在单元格的下拉框中显示结果,但不是将asstID与该行的skillID匹配,而是给我一个下拉框来选择asstID。而更糟糕的是,列出的选项是我需要通过该列本身填充的结果。莫名其妙地可以帮助这里吗? – joshmax

0

如何:

SELECT mastery_table.masteryID, 
     mastery_table.stuID, 
     mastery_table.score, 
     mastery_table.skillID, 
     skills_table.asstID 
    FROM mastery_table, skills_table 
WHERE mastery_table.skillID=skills_table.skillID 
+0

感谢您的回答,我会在早上回到工作时看到这个。我会和你回去的。 – joshmax

0

这就是我最终用来更新我的4k +行。在运行这个之前,我在DB中创建了一个名为asstID的新列。

说明: - 环通过tblMastery &从各行 抢tblMastery.skillID的值 - 连接到tblSkills &抢tblSkills.asstID的其中tblSkills.skillID匹配tblMastery.skillID 值 - 更新tblMastery.asstID与从tblSkills.asstID匹配的值

希望这可以帮助某人。 :)

<% 

set conn=Server.CreateObject("ADODB.Connection") 
conn.Provider="Microsoft.Jet.OLEDB.4.0" 
conn.Open "C:/database.mdb" 

set rs=Server.CreateObject("ADODB.Recordset") 
rs.open "SELECT tblMastery.Skill FROM tblMastery;", conn 

    do until rs.eof 
    skillID = rs.fields("Skill") 

set rs1=Server.CreateObject("ADODB.Recordset") 
rs1.open "SELECT SkillID, Assesment FROM tblSkills WHERE SkillID='" & skillID & "';", conn 

    asstID = rs1.fields("Assesment") 

    sql = "UPDATE tblMastery SET asstID='" & asstID & "' WHERE Skill='" & skillID & "';" 
    on error resume next 
    conn.Execute(sql) 

rs.movenext 
loop 

%> 
+1

使用Thomas建议的连接会好得多。这几乎违背了关系数据库设计的规则。 – Fionnuala

+0

我在数据库设计领域没有太多经验。我在MS Access中寻求帮助,托马斯也这样做了:托马斯提供的SQL帮助我检索我需要的信息,但我无法通过*更新表格*访问我期望的方式:正如我在我的问题,我不是很熟悉SQL;所以当我回到什么时候,更加熟悉和做了我能想出来的东西。如果您知道如何使用Thomas的SQL语句*更新所需表格,请务必将其发布以供将来参考:) – joshmax