我想查詢我們的數據庫以提取客戶數據。關鍵部分是:與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可能不在你想象的地方工作。 –