Выполнить второй запрос для данных, не совпадающих в первом запросе - PullRequest
0 голосов
/ 20 февраля 2019

Есть две таблицы, которые содержат информацию о Книгах.Давайте назовем их BooksData1 и BooksData2.

У меня есть другая таблица, в которой есть bookIds и языки, назовем это BookIdsAndLang.Мне нужно собрать данные о книгах для всех bookIds и языков в таблице BookIdsAndLang.Сначала проверьте таблицу BooksData1, если найдены совпадения bookIds и языков, прочитайте из таблицы.Для bookIds и языков, которые не были найдены в BookData1, читайте от BooksData2.Если существуют bookIds и языки, которых нет ни в BooksData1, ни в BooksData2, то регистрируйте сообщения об ошибках для них.

В текущей реализации BooksData1 уже внутренне объединен с BookIdsAndLang для bookIds и языка.Теперь только для bookIds и языков в BookIdsAndLang, которые не были найдены в BooksData1, нужно искать в BooksData2.

Как определить, какие bookIds и языки не были сопоставлены в BooksData1, чтобы их можно было объединить с BooksData2.Ищите масштабируемое решение, так как в будущем могут появиться BooksData3 и BooksData4.

Решение 1: Временная таблица скажет MissingBooksData.Вставьте в него bookIds и языки, которых нет в «BooksData1».Затем выполните

BooksData2 inner join MissingBooksData on Ids and languages

Нам нужно избегать предложения where..in, поскольку оно имеет ограничение 65536 значений, и этот вариант использования легко превзойдет его.

Пожалуйстапредложить, как лучше спроектировать это.Спасибо

1 Ответ

0 голосов
/ 20 февраля 2019

Вы можете использовать OUTER JOIN для выбора строк в BookIdsAndLang, которых нет ни в одном из BookDataN

SELECT l.bookId, l.langId
FROM BookIdsAndLang l
     LEFT OUTER JOIN BookData1 b1 
        ON b1.bookId = l.bookId AND b1.langId = l.langId
     LEFT OUTER JOIN BookData2 b2 
        ON b2.bookId = l.bookId AND b2.langId = l.langId
     ...
WHERE b1.bookId IS NULL AND
      b2.bookId IS NULL AND ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...