Один запрос MySQL, который проверяет другую таблицу на наличие строк

0

У меня есть таблица "Пользователи" и таблица "Платежи". Мне нужен запрос, в котором перечислены пользователи, которые НЕ имеют запись в таблице платежей, где поле PaymentCompleted = 1.

Это столбцы в таблицах (упрощенные):

     Users: UserID, UserName
  Payments: PaymentID, UserID, PaymentCompleted

Запрос должен выбрать поле UserName.

Теги:

3 ответа

2
Лучший ответ
select distinct UserName
from Users left outer join Payments on Users.UserID = Payments.UserID
where PaymentCompleted is NULL or PaymentCompleted != 1
  • 0
    +1 высокая производительность
  • 0
    Это не совсем работает, поскольку у одного пользователя может быть запись платежа с PaymentCompleted = 1, а у другого - PaymentCompleted = 0.
Показать ещё 1 комментарий
2
  SELECT UserName
  FROM Users u
  WHERE NOT EXISTS(Select 1 
                   from Payments p 
                   Where p.UserId = u.UserId
                   AND p.PaymentCompleted = 1)
  • 0
    блин ты был на 7 секунд быстрее :)
0

выберите * из t_users T, где T.userid не существует (выберите p.userid из t_payments t, где PaymentCompleted = 1).

Одно замечание: предложения "не в" могут быть вычислительно неэффективными для большого количества записей. Если вы начнете видеть проблемы с производительностью, вы можете захотеть сделать рефакторинг/редизайн.

  • 0
    Пожалуйста, используйте форматирование кода.

Ещё вопросы

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