2017-01-03 12 views
1

У меня есть две таблицы в Access, таблицы A и таблицы B:Запросы доступа сравнения двух таблиц

Таблица MasterLockInsNew:

+----+-------+----------+ 
| ID | Value | Date | 
+----+-------+----------+ 
| 1 | 123 | 12/02/13 | 
| 2 | 1231 | 11/02/13 | 
| 4 | 1265 | 16/02/13 | 
+----+-------+----------+ 

Таблица InitialPolData:

+----+-------+----------+---+ 
| ID | Value | Date |Type 
+----+-------+----------+---+ 
| 1 | 123 | 12/02/13 | x | 
| 2 | 1231 | 11/02/13 | x |  
| 3 | 1238 | 10/02/13 | y |  
| 4 | 1265 | 16/02/13 | a |  
| 7 | 7649 | 18/02/13 | z |  
+----+-------+----------+---+ 

Все, что я хочу, являются строк из таблицы B для идентификаторов, не содержащихся в A. Мой текущий код выглядит так:

SELECT Distinct InitialPolData.* 
FROM InitialPolData 
WHERE InitialPolData.ID NOT IN (SELECT Distinct InitialPolData.ID 
           from InitialPolData INNER JOIN 
            MasterLockInsNew 
            ON InitialPolData.ID=MasterLockInsNew.ID); 

Но всякий раз, когда я запускаю это в Access, он падает! Таблицы довольно большие, но я не думаю, что это причина.

Может ли кто-нибудь помочь?

Thanks

ответ

2

или попробовать left outer join:

SELECT b.* 
FROM InitialPolData b left outer join 
MasterLockInsNew a on 
b.id = a.id 
where 
a.id is null 
+0

Это оказалось самым простым способом получить то, что я хотел. Другие ответы, хотя выглядели правдоподобными, приводят к сбою доступа при запуске запроса. Спасибо всем за помощь. – naiminp

2

Простой подзапрос будет делать.

select * from InitialPolData 
where id not in (
    select id from MasterLockInsNew 
); 
+0

Почему бы не присоединиться к левой? Он часто более эффективен в Ms Access. – Fionnuala

1

Попробуйте использовать NOT EXISTS:

SELECT Distinct i.* 
FROM InitialPolData AS i 
WHERE NOT EXISTS (SELECT 1 
        FROM MasterLockInsNew AS m 
        WHERE m.ID = i.ID) 

 Смежные вопросы

  • Нет связанных вопросов^_^