Отношение один к одному не соединяется должным образом в текстовом поле в MS Access - PullRequest
2 голосов
/ 10 января 2012

Я пытаюсь сделать простой запрос в MS Access 2007:

SELECT Table1.Name, Table2.Name FROM TABLE2
INNER JOIN TABLE1 ON TABLE2.Name = TABLE1.NAME;

Я точно знаю, что эти два поля имеют одинаковые значения;например, table1 и table2 оба имеют строки "Mike Smith".Однако, когда я запускаю запрос, никакие записи не отображаются.Если я зайду в table2 и перезапишу запись имени, она отобразится в запросе.

Обе эти таблицы создаются запросами таблиц из связанных файлов CSV.

1 Ответ

1 голос
/ 10 января 2012

Посмотрите, согласен ли механизм БД с тем, что значения Имени для Майка Смита одинаковы в обеих таблицах.

SELECT
    [Name] AS name_field,
    Len([Name] AS name_length,
    'TABLE1' AS source_table
FROM TABLE1
WHERE
    [Name] ALike '%Mike%'
    AND [Name] ALike '%Smith%'
UNION ALL
SELECT
    [Name] AS name_field,
    Len([Name] AS name_length,
    'TABLE2' AS source_table
FROM TABLE2
WHERE
    [Name] ALike '%Mike%'
    AND [Name] ALike '%Smith%'
ORDER BY 1, 3;

В дополнение к возможности конечных пробелов, как упоминалось @JohnFx, ваши значения Имени могутвключайте невидимые символы, которые не являются пробелами.Я сталкивался с такими символами при импорте из источников данных Excel.

Обновление : если вы выполняете запрос с использованием DAO, вы можете изменить предложение WHERE следующим образом:

WHERE
    [Name] Like '*Mike*'
    AND [Name] Like '*Smith*'

Однако это предложение WHERE может вызвать проблемы при выполнении запроса в ADO, поскольку ADO требует использования подстановочных знаков ANSI (% и _ вместо * и?).Ключевое слово ALike (ANSI Like) указывает механизму БД ожидать подстановочных знаков ANSI, поэтому будет работать одинаково, независимо от того, выполняется ли запрос в DAO или ADO.

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