MS Access数据库表比较

时间:2016-01-18 15:23:18

标签: sql ms-access

我正在尝试比较任何给定字段的三个MS Access表。例如,我有一个Main Table,它保存了学童的记录。它包含字段Student IDName。然后有3个子表学校,但他们有一些数据差异。我们打电话给这些学校,ABC。这些学校以某种方式将Student IDName混为一谈,因此我需要一种方法来返回任何与Student ID不匹配的NameMain table student IDPKey,另一个为student ID; A,B& C也PKeyINNER JOIN。但问题是,当我在Access中建立关系时,它只返回所有3个表中常见的ID - plt.plot(y1, marker='o', linestyle=None, color='b') plt.plot(y2, marker='o', linestyle=None, color='r') plt.show() 。我需要一种有效的方式来匹配学校,A - > B& A - > C并连接结果。我认为加入这些中的每一个可能需要太长时间。如果您有其他选择,请告诉我。

1 个答案:

答案 0 :(得分:0)

所以,你有两个问题:

  1. 您有错误的数据需要修复Student_ID和NAme混合
  2. 您的架构不好。
  3. 解决数据问题:

    如果您的student_ids都是数字,您可以尝试以下内容:

    UPDATE subA SET student_id = [name], [name]=student_id WHERE isnumeric([name]);
    

    重复其他混合子表。

    解决架构问题:

    每所学校有三个“子表”。这三个表应该是一个表,“School”应该是该表中的一个字段。所以你的数据看起来像:

    +--------+------------+---------+
    | School | Student_Id |  Name   |
    +--------+------------+---------+
    | A      |          1 | John    |
    | A      |          2 | Jasmine |
    | B      |          3 | Fred    |
    | C      |          5 | Harold  |
    | C      |          6 | Donna   |
    +--------+------------+---------+
    

    这样,您只能加入一个表,并且当您的新学校进入您的数据库时,您的数据只会按行增长。

    其次,如果我正确地阅读了您的问题,student_id表中的namemain以及三个子表都有?{1}}和student?看起来你应该只将它们保存在一个表中,可能名为SELECT 'A' as school, student_id, name FROM subA UNION ALL SELECT 'B', student_id, name FROM subB UNION ALL SELECT 'C', student_id, name FROM subC

    最后,您可以将三个子表组合到一个视图中,使用UNION查询可以使9000%(猜测)更容易加入,以便将来查询:

    main

    这会将所有三个表堆叠在一起,并为您提供类似于上面示例的架构。您可以加入SELECT * FROM mainTable INNER JOIN ( SELECT 'A' as school, student_id, name FROM subA UNION ALL SELECT 'B', student_id, name FROM subB UNION ALL SELECT 'C', student_id, name FROM subC ) AS subs ON mainTable.student_id = subs.student_id 表,例如:

    location