【问题标题】:list of Product customer didn't ordered?客户未订购的产品列表?
【发布时间】:2026-02-10 16:20:05
【问题描述】:

我在这里遇到了一个问题。我需要查看客户 X 没有购买的产品。即,“Jane D”(客户)尚未订购哪些产品。下面是数据库设计。在编码时,我最终得到了该客户订购的产品,但无法获得他/她没有订购的产品。你能帮忙吗?

我想要的是库存中的产品列表,客户还没有订购。不是产品表中的那个

Customer: customer_id, customer_name

Order: order_id, customer_id,inventory_id, order_Date

Inventory: Inventory_id, product_ID

Product: product_id, product_name

from below query i can find what customer_id=1 has bought


SELECT p.Product_ID, p.Product_NAME
FROM CUSTOMER C JOIN Order O ON c.customer_id=o.customer_id
JOIN INVENTORY I ON o.inventory_id=i.inventory_id
JOIN product p ON i.product_id=p.product_id
WHERE C.CUSTOMER_ID='1';

【问题讨论】:

  • 那是错字,它只是 i.product_id

标签: mysql


【解决方案1】:
SELECT p.Product_ID, p.Product_NAME
FROM product p 
JOIN INVENTORY i ON p.product_id = i.product_id
LEFT JOIN Order o
        ON o.inventory_id = i.inventory_id
        AND o.customer_id = '1'
WHERE o.customer_id IS NULL

【讨论】:

  • 这个是正确的,但我如何只从库存而不是产品表中获取列表。 (如果它不是库存,我不需要显示它)
【解决方案2】:

以下查询将给出所需的结果。右外连接和空检查可以为您解决问题。

SELECT p.Product_ID, p.Product_NAME
FROM CUSTOMER C JOIN Order O ON c.customer_id=o.customer_id
JOIN INVENTORY I ON o.inventory_id=i.inventory_id
RIGHT OUTER JOIN product p ON i.product_id_id=p.product_id
WHERE C.CUSTOMER_ID='1' and i.product_id is null;

【讨论】:

  • 这只会选择C.CUSTOMER_ID='1'所在的行。我不认为它会起作用。
  • 是的,这实际上是行不通的,因为它获取的产品列表不在库存中,而是从产品中获取。我想要的是库存中的产品列表,客户还没有订购。