【问题标题】:I need help on INSERT command, two tables我需要关于 INSERT 命令的帮助,两张表
【发布时间】:2009-07-07 15:05:41
【问题描述】:

我有两张桌子:

主题 身份主体 用户名 主题

等级 ID等级 身份主体 等级

SUBJECTS.IDsubjects 和 GRADES.IDsubject 连接在一起形成一个关系数据库。我想根据用户的主题插入成绩,但我不知道该怎么做。

我有三个价值观: - 用户名 - 学科 - 等级

我想根据一个科目在 GRADES 表中插入一个成绩,因为会有很多科目,我希望将一个具体的成绩应用于一个具体的科目。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:
    INSERT INTO GRADES (IDSUBJECT, GRADE)
      (
        (SELECT SubjID
         FROM SUBJECTS
         WHERE USERNAME = [username]
         AND SUBJECT = [subject]),
        [grade]
      )
    

    请注意,您没有主题 ID 而只有主题名称是否有原因?另外,您真的希望用户名是科目表中的字段而不是成绩表中的字段吗?

    【讨论】:

    • +1 表示“您真的希望用户名是科目表中的字段而不是成绩表中的字段吗?”
    • 非常感谢 :) 我认为 - 显然,你也这样做 - 将用户作为 Grades 表中的一个字段更有意义,因为等级特定于用户的组合和主题。由于桌子的设计听起来像是该机构为每个学生提供了一个独特的主题。
    • 非常感谢,但我不断收到“INSERT INTO 语句中的语法错误”。我不确定用户名字段应该在哪里。
    • 您需要将我使用的名称(“GRADES”、“IDSUBJECT”、“用户名”等)替换为您的表和值的实际名称。你使用的环境是什么? ie 这个查询是被输入到 SQL Server 的查询分析器中,还是你在 VB 应用程序中执行 SQL 查询等?
    • 我确实替换了这些值。这是 MS Access 2007。
    【解决方案2】:
    UPDATE Grades SET grade='F' WHERE subject IN(SELECT subject FROM stackoverflow)
    

    【讨论】:

    • 谢谢。我这里没有错误,查询被执行但没有值被存储在任何地方。
    【解决方案3】:

    我假设您的 GRADES.IDgrades 是一个 auto_increment 键,并且会自动生成。此外,在SELECT 语句中,值“A”是您放置实际成绩值的位置。它实际上并没有从 SUBJECTS 表中选择它,而只是选择了指定的显式值。我还分别使用了“数学”和“比利”作为成绩和科目的值。

    INSERT into GRADES (IDsubject, grade)
        SELECT IDsubjects, 'A'
        FROM SUBJECTS 
        WHERE username = 'billy' 
            AND subject = 'math'
    

    这将在 GRADES 中插入一个新行,其中 IDsubjects 是从 IDsubjects 表中选择的。

    【讨论】:

    • 谢谢。我在这里遇到同样的错误,但我会尝试找出问题所在。
    【解决方案4】:

    假设IDGrades是自动生成的ID,

    INSERT INTO GRADES (IDSubject, GRADE)
    SELECT  s.IDsubjects,
            @GRADE
    FROM    SUBJECTS s
    WHERE   s.USERNAME = @USERNAME
        AND s.[SUBJECT] = @SUBJECT
    

    带有多个 ID 列的非常奇怪的命名约定 (IDSubjects)

    【讨论】:

    • 感谢您的帮助,但我没有看到任何变化。也许这在 MS Access 2007 中不起作用?
    • @dotnetasp35:给出一个你如何执行它的真实示例 SQL
    • INSERT INTO 成绩(IDSubject,Grade)选择subjects.IDsubjects,@GRADE FROM SUBJECTS 科目,其中subjects.USERNAME = 'demo' ANDsubjects.[Subject] = 'math'
    • 只运行时你会得到什么:SELECTsubjects.IDsubjects FROM SUBJECTS 科目 WHERE subject.USERNAME = 'demo' AND subject.[Subject] = 'math' ??? -- 如果没有返回任何行,那么您基本上还没有该用户和该主题的主题行。您应该先创建它。建议。
    猜你喜欢
    • 2019-05-17
    • 2015-04-12
    • 2023-04-06
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多