使用查询检查记录

时间:2016-12-06 14:15:51

标签: database ms-access

我在学校做IT。我们使用基于Access中的数据库的程序。父母填写他们的儿子或女儿的名字,姓名和班级 然后为我们提供关于他们孩子的额外信息。这必须是正确的,尤其是班级。

这就是我放置一个控件(查询检查类)的原因。我有一张桌子,我可以找到孩子的所有信息(表'学生') 另一张桌子(“信息”)是父母填写的内容。现在我希望看到所有父母犯错误的学生:

这是我的查询,它不起作用:

In (SELECT [class] FROM [information] WHERE (([information].[frontname] = [student].[frontname]) AND ([information].[class] <> [student].[class])))

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

由于某些原因,您的SQL无效。

  1. IN()应该被取出。它是比较中使用的表达式,并且放置位置不正确,无法更改结果数据集。
  2. 您没有调用表格信息和表格学生,但您在WHERE声明中对这两者进行了比较。
  3. SELECT [class]不明确。两个表中都存在[class],因此您需要选择要查看的表的值。如果它是学生表,那么它应该是SELECT [student].[class]也许你想看到这两个值,所以你可以看到它们的区别。
  4. 使用联接,它们更易于阅读和理解
  5. 因此,编辑可能无法满足您的需求,因为我不完全了解您的问题,如下所示:

    SELECT [student].[class], [information].[class]
    FROM [Information]
    INNER JOIN [Student]
    ON [information].[frontname] = [student].[frontname]
    WHERE [information].[class] <> [student].[class];
    

    但是,你会得到奇怪的数据,因为你只是比较前面的名字,所以如果在这所学校有两个De Vlieger,那么查询将不知道要返回哪一个。

    所以进一步编辑,假设两个表中都存在“backname”或“lastname”或“surname”字段:

    SELECT [student].[class], [information].[class]
    FROM [Information]
    INNER JOIN [Student]
    ON [information].[frontname] = [student].[frontname]
    AND [Information].[surname] = [student].[surname]
    WHERE [information].[class] <> [student].[class];