2014-11-18 6 views
0

Я пытаюсь найти несовпадающие записи в обеих таблицах (содержит более 100 записей в обеих), используя ниже запроса (запрос был построен из мастера запроса доступа)Найти несовпадающие записи из 2 таблиц с помощью SQL Access

Таблица A

EC ID wt 
    1001 339.55 
    1007 3.77 
    1008 1.76 
    1009 13.48 
    1010 5.86 
    1011 11.58 
    1012 37.89 
    1013  4.88 
    1015  6.98 

Таблица B

 EC ID wt_xxxx 
    1001 339.55 
    1002  1.99 
    1003  1.78 
    1004  2 
    1007 3.77 
    1008 1.76 
    1009 13.48 
    1010 5.86 
    1011 11.58 
    1012 37.89 

Query1 Retruns все записи в таблице А те не в таблице B.

SELECT A.[EC ID], A.wt 
    FROM A LEFT JOIN B ON A.[EC ID] = B.[EC ID] 
    WHERE (((B.[EC ID]) Is Null)); 

Возвращает

EC ID wt 
    1013  4.88 
    1015  6.98 

Аналогично Query2 Retruns все записи в таблице В те не в таблице А.

SELECT B.[EC ID], B.wt_xxxx 
    FROM B LEFT JOIN A ON B.[EC ID] =A.[EC ID] 
    WHERE (((A.[EC ID]) Is Null)); 

Возвращает

EC ID wt_xxxx 
    1002  1.99 
    1003  1.78 
    1004  2 

при запуске второго запроса доступа является закрытие себя. Но иногда это дает результат. Не мог понять, почему. есть ли эффективный способ сделать это. Я использовал запрос в stackoverflow Finding unmatched records with SQL Производительность очень плохая, для получения результата требуется 15 минут. Любое другое решение есть с запросом непревзойденных записей?

+0

более 100 записей, вы имеете в виду несколько сотен? И запрос из связанного сообщения занимает 15 минут? можете ли вы разместить файл доступа где-нибудь, мне любопытно :) – Axarydax

ответ

0

если запись будет появляться только один раз в таблице

select count(*),EC ID,wt_xxxx 
from (select B.[EC ID], B.wt_xxxx 
     TABLEB B 
     union all 
     select A.[EC ID], A.wt_xxxx 
     TABLEB A) q 
group by EC ID,wt_xxxx 
having count(*) =1 

ИЛИ используя то, что у вас есть. Вы близки, просто используйте полное внешнее соединение для поиска нулей в любой таблице

SELECT B.[EC ID], B.wt_xxxx, A.[EC ID], A.wt_xxxx, 
    FROM B FULL OUTER JOIN A ON B.[EC ID] =A.[EC ID] 
    WHERE A.[EC ID] Is Null or B.[EC ID] Is Null ; 
Смежные вопросы