sql, чтобы вернуть уникальный список UserID's на основе 2 таблиц - PullRequest
0 голосов
/ 22 октября 2009

(не обсуждая дизайн стола, сделка сделана!)

Я знаю, как выполнить этот запрос, используя предложение WHERE NOT IN, , но мне было интересно, как это можно сделать с помощью объединения. Примечание: строки не являются уникальными, поэтому мы должны сделать DISTINCT, чтобы не получить дубликаты.

Users (userID)
OldUsers(UserID)

Итак, используя предложение WHERE NOT IN, я могу сделать:

SELECT DISTINCT(u.userID)
FROM Users u
WHERE u.userID NOT IN (SELECT o.userID FROM OldUsers o)

Производительность также является ключевым фактором здесь.

Ответы [ 3 ]

3 голосов
/ 22 октября 2009
select distinct u.userID from Users u
left join OldUsers o on o.userId = u.userID
where o.userId is null
1 голос
/ 22 октября 2009

Вы также можете использовать ключевое слово EXCEPT, чтобы сделать это следующим образом:

SELECT UserID FROM Users
EXCEPT
SELECT UserID FROM OldUsers

Что касается производительности: вам просто нужно запустить три сценария (ваш собственный с NOT IN, подход Крагана с LEFT JOIN и этот с EXCEPT) в сравнении и измерить для себя, какова скорость, сколько ресурсов они используют и т. д. -> посмотрите на планы выполнения, посмотрите статистику ввода-вывода - обычные вещи ...

0 голосов
/ 22 октября 2009

Вы также можете использовать коррелированный подзапрос и EXISTS:

SELECT DISTINCT(u.userID)
FROM Users u
WHERE NOT EXISTS (
     SELECT o.userID 
     FROM OldUsers o 
     WHERE o.UserID = u.userID)

Если это на самом деле быстрее, зависит от размера таблиц, так что стоит попробовать другую версию, как предложил marc_s.

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