我有一个Users表和一个Payments表。我需要一个查询,列出付款表中没有记录的用户,其中字段PaymentCompleted = 1.
这些是表格中的列(简化):
Users: UserID, UserName
Payments: PaymentID, UserID, PaymentCompleted
查询应选择字段UserName。
答案 0 :(得分:2)
SELECT UserName
FROM Users u
WHERE NOT EXISTS(Select 1
from Payments p
Where p.UserId = u.UserId
AND p.PaymentCompleted = 1)
答案 1 :(得分:2)
select distinct UserName
from Users left outer join Payments on Users.UserID = Payments.UserID
where PaymentCompleted is NULL or PaymentCompleted != 1
答案 2 :(得分:0)
从t_users T中选择*,其中T.userid不存在(从t_payments t中选择p.userid,其中PaymentCompleted = 1)。
一个注意事项:对于大量记录,“not in”子句在计算上效率低下。如果您开始看到性能问题,您可能需要进行一些重构/重新设计。