我有一个用户表和一个付款表。我需要一个查询,列出在付款表中拥有 PaymentStatus=1 记录的用户。
它还必须仅列出具有特定 GroupID 的用户。 GroupID 将通过变量传递,但为了简单起见,我们可以将其称为 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
最佳答案
您想要使用 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;
关于MySQL 查询使用 2 个表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3587941/