Как сравнить одно и то же текстовое поле в двух разных таблицах (не связанных) и сохранить как новую таблицу - PullRequest
1 голос
/ 27 января 2011

Мне нужно сравнить пользователей таблицы и таблицы.

Оба имеют одинаковый код пользователя (текстовое поле), но между ними нет никакой связи.

Код пользователя (должен состоять из 11 символов) из:

  • таблица счетов "идеально" (я имею в виду правильно)

  • пользователи чаще всего теряют некоторые из необходимых 11 символов

Мне нужно искать в учетных записях код пользователя, ища что-то похожее на пользователей (мин. 9 или 10 символов, независимо от того, начинается ли он с середины). Мне нужно только то, что не соответствует, а не то, что соответствует.

Выходные данные должны быть:

  • идентификатор пользователя
  • идентификатор со счета
  • код пользователя от аккаунта
  • код пользователя от пользователей

Я могу сделать это в доступе или Excel, решить, что лучше!

пример пользователей

iduser        usercode_user
1             1a2b3c4d5
2             123456789a

пример счетов

idaccount     usercode_accounts
55            1a2b3c4d5e6
87            a123456789a

пример результатов

iduser    idaccount     usercode_user      usercode_accounts
1         55            1a2b3c4d5          1a2b3c4d5e6
2         87            123456789a         a123456789a

1 Ответ

1 голос
/ 27 января 2011
SELECT u.iduser, a.idaccount, u.usercode_user, a.usercode_accounts
FROM users AS u, accounts AS a
WHERE (((a.usercode_accounts) Like "*" & [u].[usercode_user] & "*"));

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

Если вы выполняете запрос с ADO, используйте подстановочный знак ANSI% вместо *.

Или вы можете использовать подобное сравнение, и запрос будет работать либо с ADO, либо с DAO.

WHERE (((a.usercode_accounts) ALike "%" & [u].[usercode_user] & "%"))

Редактировать : в ваших образцах данных не было одинаковых кодов пользователей и учетных записей. Но чтобы исключить точные совпадения, используйте это:

SELECT u.iduser, a.idaccount, u.usercode_user, a.usercode_accounts
FROM users AS u, accounts AS a
WHERE
    (((a.usercode_accounts)<>[u].[usercode_user]
    And (a.usercode_accounts) ALike "%" & [u].[usercode_user] & "%"));
...