2011-10-15 2 views
0

여기에 하나의 쿼리가 붙어 있습니다. 고객 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'; 
+0

'i.product_id_id'란 무엇입니까? –

+0

이 오타였습니다. i.product_id가 –

답변

2
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 
+0

입니다.이 중 하나는 정확하지만 제품 테이블이 아닌 인벤토리에서만 목록을 가져 오는 방법은 무엇입니까? (인벤토리가 아닌 경우 표시하지 않아도됩니다.) –

0

로부터 안 하나는 필요한 결과를 줄 것이다. null 체크와 함께 오른쪽 외부 조인이 트릭을 수행합니다.

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; 
+0

이렇게하면'C.CUSTOMER_ID = '1'인 행만 선택됩니다. 나는 그것이 효과가 있다고 생각하지 않는다. –

+0

실제로 이것은 재고 목록에없는 제품 목록을 가져올 수 있기 때문에 실제로 작동하지 않습니다. 내가 원했던 것은 재고 목록에있는 제품 목록이며 고객은 주문을받지 못했습니다. –

관련 문제