Sql 何鸿燊在过去几年中多次购买。而且,这比必要的要复杂得多。@gordon linoff我认为你错了-这是要求:“1号客户在2018年、2019年和2020年下订单。而2号客户只在2018年下订单。结果只需显示Laura向Dooki索要的2号客户(2019年没

Sql 何鸿燊在过去几年中多次购买。而且,这比必要的要复杂得多。@gordon linoff我认为你错了-这是要求:“1号客户在2018年、2019年和2020年下订单。而2号客户只在2018年下订单。结果只需显示Laura向Dooki索要的2号客户(2019年没,sql,sql-server,select,where-clause,Sql,Sql Server,Select,Where Clause,何鸿燊在过去几年中多次购买。而且,这比必要的要复杂得多。@gordon linoff我认为你错了-这是要求:“1号客户在2018年、2019年和2020年下订单。而2号客户只在2018年下订单。结果只需显示Laura向Dooki索要的2号客户(2019年没有下订单),所以我测试了这个,添加了一个根本没有订单的客户。我运行了查询,但它没有显示新客户,因此我认为gordon是正确的,因为我需要显示所有在2019年没有下订单的客户(这将包括任何从未下过订单的客户)是-这是因为内部联接-可能有左联接、右


何鸿燊在过去几年中多次购买。而且,这比必要的要复杂得多。@gordon linoff我认为你错了-这是要求:“1号客户在2018年、2019年和2020年下订单。而2号客户只在2018年下订单。结果只需显示Laura向Dooki索要的2号客户(2019年没有下订单),所以我测试了这个,添加了一个根本没有订单的客户。我运行了查询,但它没有显示新客户,因此我认为gordon是正确的,因为我需要显示所有在2019年没有下订单的客户(这将包括任何从未下过订单的客户)是-这是因为内部联接-可能有左联接、右联接、完全外部联接等,你应该考虑一下:),内部连接意味着两个表的共同点感谢Gordon,这似乎成功了。为了更好地理解这一点,你能解释一下“选择1”的作用吗?@LauraRoscoe。
exists
子查询只检查行的存在,而不是特定的值。
1
是最简单的输入方式。你可以用任何东西。我建议不要使用
NULL
,因为我认为这很容易混淆(
NULL
不应表示存在有效值)。讽刺的是,在某些数据库中,表达式甚至可能生成错误,例如
1/0
——但也不要使用它,除非是为了向某人炫耀。
SELECT c.* 
FROM Customer c
INNER JOIN CustomerOrder co ON c.CutomerID = co.CutomerID
INNER JOIN Shipment sh ON co.shipmentID = sh.ShipmentID
WHERE YEAR(sh.DepartDate) <> 2019
SELECT c.* 
FROM Customer c
INNER JOIN CustomerOrder co ON c.CutomerID = co.CutomerID
INNER JOIN Shipment sh ON co.shipmentID = sh.ShipmentID
WHERE YEAR(sh.DepartDate) <> 2019 AND  c.CutomerID 
  NOT IN (SELECT c.* 
          FROM Customer c
          INNER JOIN CustomerOrder co ON c.CutomerID = co.CutomerID
          INNER JOIN Shipment sh ON co.shipmentID = sh.ShipmentID
          WHERE YEAR(sh.DepartDate) = 2019)
SELECT c.* 
FROM Customer c
WHERE NOT EXISTS (SELECT 1
                  FROM CustomerOrder co JOIN 
                       Shipment sh
                       ON co.shipmentID = sh.ShipmentID
                  WHERE c.CustomerID = co.CustomerID AND
                       sh.DepartDate >= '2019-01-01' AND
                       sh.DepartDate < '2020-01-01'
                 );
select c.* 
from customers c
    left outer join (
        select customerID 
        from CustomerOrder o 
            join Shipment s on s.ShipmentID=o.ShipmentID 
        where DepartDate>='2020-01-01' and DepartDate<'2021-01-01'
    ) x on x.customerID=c.customerID  
where x.customerid is null