Выберите записи из таблицы B с несколькими условиями из таблицы A

0

Я пытаюсь обернуть мозг вокруг этого, используя объединения, подзапросы, не существующие предложения, и я не могу придумать запрос, который дает правильные результаты.

Таблица A - ИДЕНТИФИКАТОР ПЕРВИЧНОГО (не относится к этой проблеме)

id | campaign_id | user_id
--------------------------
1         1           1
2         1           2
3         0           3
4         2           3
5         1           2

Таблица B - UNIQUE campaign_id + user_id

campaign_id | user_id | admin
-----------------------------
     1           1        1
     1           2        0
     1           3        0
     2           3        0

Мне нужно найти экземпляры таблицы B, в которых пользователь больше не имеет записи в таблице A, которые соответствуют элементу campaign_id в таблице B. Таблица A является основным содержанием, и они могут иметь несколько записей таблицы A, которые присутствуют в кампания. Таблица B является таблицей-членом, которая указывает, что они являются участниками кампании и являются ли они администратором или нет. Кроме того, они могут иметь вход в таблице B в качестве администратора, но не иметь записи в таблице A, поэтому запрос должен проверять на admin = 0.

В записях примера неверной записью в таблице B будет campaign_id 1, user_id 3

Теги:
database

1 ответ

1
Лучший ответ

Используйте внешнее соединение, а затем укажите в предложении where, что внешняя объединенная таблица user_id имеет значение null:

select    tblB.*
from      tblB
left join tblA 
       on tblA.campaign_id = tblB.campaign_id
      and tblA.user_id = tblB.user_id
where     tblB.admin = 0
      and tblA.user_id is null
  • 0
    Да, это сделал это. Я знал, что смогу сделать это с помощью соединения с 2 условными обозначениями, думаю, я забыл, что user_id имеет значение null. Спасибо за быстрый ответ!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню