Сравните очень разные таблицы - PullRequest
0 голосов
/ 08 марта 2019

У меня есть два Tables, которые считываются из отдельных файлов (.xlsx и .csv) и импортируются в MS Access.Они не в одном и том же формате (именно поэтому у меня такие трудные времена).

Вот xlsxTable:

+--------------------------------------------------------------------------------------+
|    ID    |     Name     |    SSN    |    SSN2    |   Address                         |
+--------------------------------------------------------------------------------------+
| 00012345 | Robert Robin | ThisIsSSN | ThisIsSSN2 | 12345 StreetName St. CityName, KS |
| 00013245 | Pete Peters  | ThisIsSSN | ThisIsSSN2 | 54321 StreetName St. CityName, MO |
| 00012358 | Mike Michaels| ThisIsSSN | ThisIsSSN2 | 69874 StreetName St. CityName, NY |
| 00098755 | Tim Timpson  | ThisIsSSN | ThisIsSSN2 | 15987 StreetName St. CityName, KY |
| 00035784 | Tom Thompson | ThisIsSSN | ThisIsSSN2 | 95123 StreetName St. CityName, CA |
| 00012584 | Will Willers | ThisIsSSN | ThisIsSSN2 | 35789 StreetName St. CityName, WA |
| ........ | ...........  | ......... | .......... | ................................. |

Вот мой csvTable:

+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tracking_number   |   last_name   |   first_name   |  middle_name  |  suffix  | alias_last_name   |   alias_first_name   |    alias_middle_name   |   alias_suffix  |    number   |    number_type     |    dob     |    street   |     city     |  state  | zip  | country | phone |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|            135247 |  Keeves       |   Michael      |               |  Jr      |                   |                      |                        |                 |  ThisIsSSN  | SSN/ITIN           |   1/1/1990 | StreetName  |   CityName   |    NJ   |      |   US    |       |
|            135248 |  Jackson      |   Sue          |    Master     |          |                   |                      |                        |                 |  ThisIsSSN  | SSN/ITIN           | 10/29/1980 | StreetName  |   CityName   |    NY   | zip  |   US    |       |
|            135248 |  Thomspon     |   Dolf         |    Laundry    |          |                   |                      |                        |                 |  DriverNum  | Driver'sLicense    | 11/15/1962 | StreetName  |   CityName   |    KS   |      |   US    |       |
|            135249 |  Peters       |   Pete         |               |          |    Peters         |     Petey            |                        |                 |  ThisIsSSN  | SSN/ITIN           |   5/6/1975 | StreetName  |   CityName   |    PA   | zip  |   US    |       |
|            135250 |  Rogers       |   Steve        |               |          |                   |                      |                        |                 |  ThisIsSSN  | SSN/ITIN           | 12/25/1990 | StreetName  |   CityName   |    CT   | zip  |   US    |       |
|            135250 |  Nikolson     |   Jack         |               |  Jr      |                   |                      |                        |                 |  DriverNum  | Driver'sLicense    |   8/5/1975 | StreetName  |   CityName   |    CA   | zip  |   US    |       |
|            135251 |  Keeves       |   Keanu        |    Neo        |          |                   |                      |                        |                 |  ThisIsSSN  | SSN/ITIN           | 10/30/2000 | StreetName  |   CityName   |    TX   | zip  |   US    |       |
|            135252 |  Starch       |   Tony         |               |          |                   |                      |                        |                 |  ThisIsSSN  | SSN/ITIN           |  9/10/1975 | StreetName  |   CityName   |    NJ   |      |   US    |       |
|...................|...............|................|...............|..........|...................|......................|........................|.................|.............|....................|............|.............|..............|.........|......|.........|.......|
| dba_name          |   number      |   number_type  |  incorporated |  street  |       city        |        state         |        zip             |    country      |    phone    |                    |            |             |              |         |      |         |       |
| Mini Mart         |   92585487    |   EIN          |               |  Street  |      CityName     |        state         |        zipNum          |    GT           |             |                    |            |             |              |         |      |         |       |
|                   |   15987548    |   EIN          |               |  street  |      CityName     |        KS            |        zipNum          |    US           |             |                    |            |             |              |         |      |         |       |
| Check Systems     |   35854855    |   EIN          |               |  street  |      CityName     |        CA            |        zipNum          |    US           |             |                    |            |             |              |         |      |         |       |
|...................|...............|................|...............|..........|...................|......................|........................|.................|.............|....................|............|.............|..............|.........|......|.........|.......|

Где dba_name в приведенной выше таблице является фактической строкой.По какой-то причине есть другая часть файла, которая начинает новый список.

Мне нужно запросить эти таблицы, и если имя совпадает с SSN, тогда я должен взять имя, адрес и SSN, и сделатьчто-то с ними (скорее всего, положить в другую таблицу для экспорта).Я загрузил обе таблицы из необходимых файлов.Теперь мне нужно перебрать и найти совпадения.Для примера данных здесь Pete Peters должно совпадать, так как данные находятся в обеих таблицах.Мой ожидаемый результат должен быть похож на первую таблицу:

|    ID    |     Name     |    SSN    |    SSN2    |   Address                         |

В настоящее время у меня есть база данных MS Access, которая содержит эти таблицы.Хотя с тем, как данные анализируются, я не уверен, с чего начать с SQL.С точки зрения производительности, это может быть обширным.Я просто ищу способ заставить его работать в первую очередь.

Как я могу запросить эти две очень разные таблицы и получить только те данные, которые соответствуют?

1 Ответ

1 голос
/ 09 марта 2019

В Access есть мастер поиска дубликатов.Самый быстрый способ решить эту проблему - объединить таблицы вручную или с помощью одного или нескольких запросов, а затем запустить мастер.Опять же, соберите все свои данные в одну таблицу и запустите мастер.Чтобы усложнить вещи, сломав их.Вы можете получить данные из таблицы CSV: с помощью запроса:

SELECT csvTable.First_Name AS First_Name, csvTable.Last_Name AS Last_Name, csvTable.Number AS [Number]
FROM csvTable
GROUP BY csvTable.First_Name, csvTable.Last_Name, csvTable.Number
HAVING (((Count(csvTable.Number))>1));

, а затем создать запрос с такой же структурой из таблицы xlsx:


SELECT Left([xlsxTable]![FullName],InStr([xlsxTable]![FullName]," ")) AS First_Name, Right([xlsxTable].[FullName],Len([xlsxTable].[FullName])-InStr([xlsxTable]![FullName]," ")) AS Last_Name, xlsxTable.SSN AS [Number]
FROM xlsxTable
GROUP BY Left([xlsxTable]![FullName],InStr([xlsxTable]![FullName]," ")), Right([xlsxTable].[FullName],Len([xlsxTable].[FullName])-InStr([xlsxTable]![FullName]," ")), xlsxTable.SSN
HAVING (((Count(xlsxTable.SSN))>1));

Имеющий счет>1 делает работу по поиску дубликатов.Большая часть остальной части этого - тупые манипуляции со строками, чтобы превратить Полное имя в имя и фамилию непосредственно в SQL.Затем объедините запросы, чтобы их можно было одновременно запустить в панели sql с помощью инструкции UNION ALL:

SELECT csvTable.First_Name AS First_Name, csvTable.Last_Name AS Last_Name, csvTable.Number AS [Number]
FROM csvTable
GROUP BY csvTable.First_Name, csvTable.Last_Name, csvTable.Number

UNION ALL 
SELECT Left([xlsxTable]![FullName],InStr([xlsxTable]![FullName]," ")) AS First_Name, Right([xlsxTable].[FullName],Len([xlsxTable].[FullName])-InStr([xlsxTable]![FullName]," ")) AS Last_Name, xlsxTable.SSN AS [Number]
FROM xlsxTable
GROUP BY Left([xlsxTable]![FullName],InStr([xlsxTable]![FullName]," ")), Right([xlsxTable].[FullName],Len([xlsxTable].[FullName])-InStr([xlsxTable]![FullName]," ")), xlsxTable.SSN;

union all сохраняет дубликаты, а union их опускает.Я удалил из профсоюза заявления о том, что он работает лучше.затем используйте мастер поиска дубликатов в комбинированном запросе, например:

SELECT [combine tables].First_Name, [combine tables].Last_Name, [combine tables].Number
FROM [combine tables]
GROUP BY [combine tables].First_Name, [combine tables].Last_Name, [combine tables].Number
HAVING (((Count([combine tables].Number))>1));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...