SQL - 没有付款的客户

时间:2015-04-23 16:23:52

标签: mysql

我正在寻找以下SQL代码:

显示尚未支付任何款项的客户的订单ID。

注意:有一个客户,订单和付款表。 customerID不在付款表中。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

你没有给予太多的帮助。

select id 
  from orders o
    left join payments p
      on p.order_id = o.id
  where p.order_id is null
假设我有正确的关系,这将给你所有没有付款的订单。

答案 1 :(得分:0)

听起来你可以使用反连接模式,例如

<div data-bind="compose: 'viewmodel/fol/index'"></div>

表示从SELECT o.orderID FROM orders o LEFT JOIN payments p ON p.orderID = o.orderID WHERE p.orderID IS NULL 获取所有行,并匹配orders。如果paymentsorders不匹配,则payments中的行将与orders值一起返回,而不是&#34;缺少&# 34;来自NULL的行。 (关键字 payments 前面的关键字 LEFT 告诉MySQL执行&#34;外连接&#34;,从中返回所有行左侧的表(否则满足谓词),即使右侧表中没有匹配的行。)

&#34;技巧&#34;是WHERE子句中的谓词,我们在JOIN中放弃orders中具有匹配行的任何行,而payments的行不会匹配orders 1}}。

还有其他查询模式可以实现相同的结果,例如paymentsNOT IN (subquery)

例如:

NOT EXIST (correlated subquery)

-OR -

 SELECT o.orderID
   FROM orders o
  WHERE o.orderID NOT IN 
        ( SELECT p.orderID  
            FROM payments p
           WHERE p.orderID IS NOT NULL
        )
相关问题