2010-08-27 48 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