MySQL запрос на использование данных из 2 таблиц

0

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

Он также должен указывать только пользователей с определенным идентификатором GroupID. ГруппаID будет передана переменной, но мы просто можем назвать ее 5 для простоты.

Временная метка записи (TimeCompleted) также должна быть меньше заданной временной метки, но мы можем просто назвать это 10.

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

     Users: UserID, GroupID, UserName
  Payments: PaymentID, UserID, PaymentStatus, TimeCompleted

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

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

Вы можете улучшить свой текущий запрос, если хотите (он делает все, кроме последней проблемы с дублированием возвращаемых пользователей). Возможно, я ошибаюсь, но:

         SELECT `Users`.`UserName`
           FROM `Users`
LEFT OUTER JOIN `Payments` ON `Users`.`UserID` = `Payments`.`UserID`
          WHERE `Payments`.`TimeCompleted` < 10
            AND `Payments`.`PaymentStatus` = 1
            AND `Users`.`GroupID` = 5
  • 0
    Это похоже на домашнее задание. Это?
  • 0
    Нет, это просто мой проект: P Я сейчас пытаюсь ответить на вопросы ..
Теги:

3 ответа

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

Вы хотите присоединиться к двум таблицам с помощью ключа UserId. Предложение group by ограничивает отдельное имя пользователя:

select UserName 
from Users inner join Payments on (Users.UserID = Payments.UserID)
where PaymentStatus = 1 and GroupID = 5 and TimeCompleted < 10 group by Users.UserID;
  • 0
    Спасибо вам большое! Это сработало отлично: D
0
select * 
from users uu
join payments p on p.userid=uu.userid
where p.paymentcompleted=1 and uu.groupId=5
0

запрос будет выглядеть так: SELECT * FROM Users U.GroupId = 5 WHERE U.UserId IN (SELECT P.UserID FROM PAYMENTS P WHERE P.PaymentCompleted = 1 AND P.TimeStamp <= @DateVar)

Ещё вопросы

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