В SQL, как бы я сделал что-то вроде обратного соединения?Получить строки, которые не соответствуют строкам в другой таблице
Например предположим, у меня есть следующие две таблицы
UsedSlide
SlideId
UserId
SomeOtherValue
LegacySlide
SlideId
UserId
Как бы выбрать все строки в UsedSlide
где SlideId
и UserId
не совпадают со значениями в любой строке LegacySlide
?
Обратите внимание, что я специально сделал это с двумя предметами, которые мы сопоставляем, поскольку в противном случае я знаю, что могу использовать NOT IN
и подзапрос.
Бонус: В моем сценарии набор данных невелик, но что, если он был большой? Как сделать это наиболее эффективно?
Да, это то, что я думал (также 'ВЫБРАТЬ 1' может быть лучше). Но не будет ли это префикс ужасно на больших наборах данных? –
Acc. к его «бонусу-вопросу», «НЕ СУЩЕСТВУЕТ» - также самый эффективный подход (с соответствующими индексами). http://sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join –
@GeorgeMauer: также используется 'SELECT 1', но он не эффективнее, чем' SELECT * '. –