【发布时间】:2017-01-08 09:01:26
【问题描述】:
在 SQL 中,where 是一个选项 (NOT EXISTS),它允许我们仅在其他 SELECT 的结果为零时选择一行。
例如:
SELECT
c.CustomerKey
FROM
Customer c, Sales s1, Date d
WHERE
s1.CustomerKey = c.CustomerKey AND
s1.OrderDateKey = d.DateKey AND
s1.ShipDate > s1.DueDate AND
NOT EXISTS (SELECT *
FROM Sales s2
WHERE s2.OrderDateKey = s1.OrderDateKey AND
s2.CustomerKey <> s1.CustomerKey)
GROUP BY
c.CustomerKey
我尝试执行以下操作,但查询永远不会结束,所以我认为我做错了。我错过了什么?
MATCH (d1:Date)<-[:ORDERDATE]-(s1:Sales)-[:CUSTOMER]->(c1:Customer)
WHERE s1.ShipDate > s1.DueDate
WITH d1,s1,c1
MATCH (s2:Sales)-[:CUSTOMER]->(c2:Customer)
WHERE NOT(s2.OrderDateKey=s1.OrderDateKey AND c2.CustomerKey<>c1.CustomerKey)
RETURN c2.CustomerKey
【问题讨论】:
-
CustomerKey 是否唯一标识客户?