2010-08-27 68 views
0

我有一個Users表和一個Payments表。我需要一個查詢,其中列出PaymentCompleted = 1的付款表中沒有記錄的用戶。單個MySQL查詢檢查另一個表的行

這些是表(簡化的)中的列:

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

查詢應選擇字段名。

回答

2
select distinct UserName 
from Users left outer join Payments on Users.UserID = Payments.UserID 
where PaymentCompleted is NULL or PaymentCompleted != 1 
+0

+1高性能 – 2010-08-27 16:17:03

+0

這並不完全工作作爲一個用戶可能有付款記錄與PaymentCompleted = 1,另一個PaymentCompleted = 0 – 2010-08-27 16:19:10

+0

@ar:好點,這不是一個合適的解決方案。它可能在OP的情況下工作,具體取決於付款的添加邏輯。但是,查詢將返回所有沒有付款或沒有完成付款的用戶(不管是否還有可能已完成付款)。這可能是也可能不是他想要的,儘管不是他所要求的。 – 2010-08-27 21:56:40

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秒快:) – Nicolas78 2010-08-27 15:46:26

0

SELECT * FROM t_users T其中T.userid不存在(來自t_payments噸選擇p.userid其中PaymentCompleted = 1)。

一個註釋:對於大量記錄,「不在」子句可能在計算上效率低下。如果你開始看到性能問題,你可能想要做一些重構/重新設計。

+0

請使用代碼格式。 – 2010-08-27 16:17:31

相關問題