2011-01-31 2 views
4

Предположим, у меня есть две таблицы, каждая из которых имеет идентификаторы пользователя. Я хочу выполнить операцию, которая вернет все IDS пользователя в таблице 1, которые не указаны в таблице 2. Я знаю, что должен быть какой-то простой способ сделать это - может ли кто-нибудь предложить некоторую помощь?В SQL, как я могу выполнить операцию «вычитания»?

+2

Какую платформу базы данных вы используете? – JohnFx

ответ

6

Его медленный, но вы обычно можете выполнить это с чем-то вроде «не в». (Существуют и другие функции в различных системах СУБД, чтобы сделать это в более эффективные способы, Oracle, например, имеет «существует» пункт, который может быть использован для этого

Но вы могли бы сказать:.

select id from table1 where id not in (select id from table2) 
0

Попробуйте это :

SELECT id FROM table1 WHERE id NOT IN 
(
    SELECT id FROM table2 
) 
5

Есть несколько способов сделать это Вот один подход с использованием NOT EXISTS:.

SELECT userid 
FROM table1 
WHERE NOT EXISTS 
(
    SELECT * 
    FROM table2 
    WHERE table1.userid = table2.userid 
) 

А вот еще один подход с использованием объединения:

SELECT table1.userid 
FROM table1 
LEFT JOIN table2 
ON table1.userid = table2.userid 
WHERE table2.userid IS NULL 

Самый быстрый подход зависит от базы данных.

0
select ID from table1 
where ID not in (select ID from table2) 
1

Один из способов - использовать EXCEPT, если ваш диалект TSQL поддерживает его. Это эквивалентно выполнению левого соединения и нуль-тест

1
SELECT user_id FROM table1 LEFT JOIN table2 ON table1.user_id = table2.user_id WHERE table2.user_id IS NULL; 
1

Если SQL Server:

SELECT id FROM table1 
EXCEPT 
SELECT id FROM table2 

Oracle:

SELECT id FROM table1 
MINUS 
SELECT id FROM table2 

отдых: не уверен ....

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