2010-08-27 74 views
0

我有一个Users表和一个Payments表。我需要一个查询,其中列出PaymentStatus = 1的付款表中有记录的用户。MySQL查询使用2个表中的数据

它还必须仅列出具有某个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 
+0

这看起来像是一个家庭作业问题。是吗? – Sandro 2010-08-27 20:39:57

+0

Nah这只是我的一个项目:P我正在尝试查询.. – Matt 2010-08-27 20:46:54

回答

1

您想使用UserId键跨两个表进行连接。 group by clause将限制为不同的用户名:

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 – Matt 2010-08-27 20:50:13

0

查询将如下所示:SELECT * FROM用户U.GroupId = 5,其中UUUserId IN(SELECT P.UserID FROM付款p其中P.PaymentCompleted = 1 AND P.TimeStamp < = @DateVar)

0
select * 
from users uu 
join payments p on p.userid=uu.userid 
where p.paymentcompleted=1 and uu.groupId=5