我想查询我们的数据库以提取客户数据。关键部分是:与MySQL并肩作战不存在
拉出所有未购买的客户/订单product_a。
这将列出已购买的客户/订单,product_b,product_c和product_d。
但它需要确保客户还没有购买过product_a。我需要排除他们。
这是否正确的方式去关于NOT EXISTS?我仍然觉得它包含了一些买了product_a的记录。
SELECT
*
FROM
orders
JOIN customers AS cus ON orders.CustomerNumber = cus.CustomerNumber
WHERE
product != 'product_a'
OR (
HomeTelephone = ''
AND MobileTelephone != ''
)
AND NOT EXISTS (
SELECT
OrderNumber
FROM
orders AS o
JOIN customers AS c ON o.CustomerNumber = c.CustomerNumber
WHERE
c.EmailAddress = cus.EmailAddress
AND Product = 'product_a'
AND completed = 1
)
ORDER BY
orderdate
如果没有NOT EXISTS语句,即使他们单独购买了product_a,也可以包含客户记录吗?
你的问题是你'WHERE'子句中的'或'。它将包括那些有'HomeTelephone =''和MobileTelephone!='''的记录。你对这部分查询的意图是什么? –
在where子句中...将括号放在产品之前和OR括号之后,以查看查询处理器实际上在做什么。然后分析你真的想做什么。 OR可能不在你想象的地方工作。 –