Таблица A содержит основную информацию о клиенте, включая номер счета. Каждый действительный номер счета отображается ровно в одной строке таблицы A.
Таблица B содержит информацию о том, какие флаги установлены для каких клиентов.
Столбцы в таблице B - это номер счета, ключ флага, значение флага. Большинство номеров счетов отображаются в нескольких строках в таблице B, по одной для каждого флага, установленного для этой учетной записи. Однако некоторые номера счетов не имеют никаких установленных флагов и вообще не отображаются в таблице B. Флаги не имеют настроек по умолчанию и могут быть неопределенными. Если в таблице B нет строки для определенного номера счета и комбинации флагов, этот флаг не определен для этой учетной записи.
Единственный флаг, который нас волнует в этом вопросе - это флаг Foo. Есть много клиентов, у которых Foo настроен на что-то, и многие, у которых его вообще нет.
Цель: выбрать всю информацию о клиенте из таблицы A для всех клиентов, у которых не вообще установлен флаг Foo.
Мое текущее решение, которое работает, выполняет 2 запроса и затем обрабатывает результаты. Один запрос выбирает все строки из таблицы A. Другой запрос выбирает все строки из таблицы A, присоединяются к таблице B по номеру счета, где tableB.FlagKey = Foo.
Затем некоторый код, который я написал, просто перебирает результаты запроса таблицы B и генерирует список номеров счетов. Затем он просматривает результаты запроса таблицы A и просто сохраняет строки с номерами счетов, которые не отображаются в списке номеров счетов, которые я построил.
Это прекрасно работает, но я чувствую, что это "должно" быть возможно сделать в одном запросе к БД, но я не могу понять, как написать этот запрос. Я не очень опытен в написании запросов к БД.