我正在尝试比较任何给定字段的三个MS Access表。例如,我有一个Main Table
,它保存了学童的记录。它包含字段Student ID
和Name
。然后有3个子表学校,但他们有一些数据差异。我们打电话给这些学校,A
,B
和C
。这些学校以某种方式将Student ID
与Name
混为一谈,因此我需要一种方法来返回任何与Student ID
不匹配的Name
。 Main table
student ID
为PKey
,另一个为student ID
; A,B& C也PKey
为INNER 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并连接结果。我认为加入这些中的每一个可能需要太长时间。如果您有其他选择,请告诉我。
答案 0 :(得分:0)
所以,你有两个问题:
解决数据问题:
如果您的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
表中的name
和main
以及三个子表都有?{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