2016-01-18 4 views
0

Я пытаюсь сравнить три таблицы MS Access для любого заданного поля. Например, у меня есть Main Table, в котором содержится запись для школьников. Он имеет поля Student ID и Name. Тогда есть 3 школы подтабликов, но они имеют некоторое несоответствие данных. Поэтому позвольте назвать эти школы, A, B и C. Эти школы каким-то образом перепутали Student ID с Name, поэтому мне нужен способ вернуть любой Student ID, который имеет несоответствие для Name. Main table имеет student ID как PKey, а другой; A, B & C имеют student ID как PKey также. Но проблема в том, что когда я строю отношения в Access, он возвращает только идентификаторы, которые являются общими во всех трех таблицах - INNER JOIN. Мне нужен эффективный способ сопоставить школы, A -> B & A -> C и объединить результаты. Я думаю, что СОХРАНИТЬ каждый из этих пар может занять слишком много времени. Пожалуйста, дайте мне знать, если у вас есть другие альтернативы.Сравнение таблиц базы данных MS Access

+1

Вы пометили MySQL, но скажите MS Access ... Какой из них вы используете? – jarlh

+1

Ваша проблема сложная. Разве вы не добавляете простые (незашифрованные) таблицы для более легкого понимания вместо стены текста?Я попытался сделать ваш текст немного короче, чтобы люди не сдавались на полпути. –

+0

Можете ли вы добавить некоторые примеры записей и ожидаемый результат? –

ответ

0

Итак, у вас есть две проблемы:

  1. У вас есть плохие данные, которые должны быть исправлены student_id и название смешан до
  2. ваша схема не хорошо.

Решение проблемы данных:

Если student_ids все числовой, вы можете попробовать что-то вроде:

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

И повторить для других смешанных таблиц подразделов.

Решение проблемы схемы:

У вас есть три «подтаблицам» один для каждой школы. Эти три таблицы должны быть единой таблицей, а «Школа» должна быть полем в этой таблице. Так что ваши данные выглядят примерно так:

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

Таким образом, вы присоединитесь только в одной таблице, и ваши данные растут только в строках, как новые школы введены в вашу базу данных.

Во-вторых, если я правильно прочитал ваш вопрос, у вас есть как student_id, так и name в таблице main, а также три подтаблицы? Похоже, вы должны держать их только в одной таблице, возможно, по имени student.

Наконец, вы можете объединить три подтаблицы в единое мнение, что сделает его 9000% (догадка) проще присоединиться к будущим запросам, используя UNION запрос:

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 

Это стек все три таблицы на вершине друг друга и дать вам схему, аналогичную приведенному выше примеру. Вы можете присоединиться к своему столику main: