单个MySQL查询,它检查另一个表的行

时间:2010-08-27 15:42:42

标签: mysql

我有一个Users表和一个Payments表。我需要一个查询,列出付款表中没有记录的用户,其中字段PaymentCompleted = 1.

这些是表格中的列(简化):

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

查询应选择字段UserName。

3 个答案:

答案 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”子句在计算上效率低下。如果您开始看到性能问题,您可能需要进行一些重构/重新设计。