Re: Curious SQL question
Date: 5 Jan 2007 09:09:55 -0800
Message-ID: <1168016995.682546.108760_at_11g2000cwr.googlegroups.com>
Guto wrote:
> WOW!
> Thanks for so many posts!
> Facing the doubts about my question, heres a "picture" wich describes
> it best than
> my poor english ;o)
>
> --here's the first table:
>
> create table products(
> product_id integer,
> product_name char(20));
>
> --then the second
> create table orders(
> customer_id integer,
> product_id integer);
>
> --The products to be boughted:
> insert into products values ( 1 , "PIZZA");
> insert into products values ( 2 , "BLACK BEER");
> insert into products values ( 3 , "WHITE BEER");
> insert into products values ( 4 , "ANOTHER BEER");
> insert into products values ( 5 , "ICE COLDED BEER");
>
> --the customers who bought something:
> insert into orders values ( 1,1);
> insert into orders values ( 1,2);
> insert into orders values ( 1,3);
> insert into orders values ( 1,4);
>
> insert into orders values ( 2,1);
> insert into orders values ( 2,2);
>
> insert into orders values ( 3,1);
> insert into orders values ( 3,3);
> insert into orders values ( 3,4);
>
> insert into orders values ( 4,5);
>
> --I want this list:
>
> --The customer 1 didn't bought the product 5
>
> --The customer 2 didn't bought the product 3
> --The customer 2 didn't bought the product 4
> --The customer 2 didn't bought the product 5
>
> --The customer 3 didn't bought the product 2
> --The customer 3 didn't bought the product 5
>
> --The customer 4 didn't bought the product 1
> --The customer 4 didn't bought the product 2
> --The customer 4 didn't bought the product 3
> --The customer 4 didn't bought the product 4
>
> --And as have tried this ( at least first obvious attempt didn't
> works)
> Select customer_id, product_id from orders
> where product_id not in ( select product_id from products )
>
> I hope i was a little bit clear this time!
> Thanks Indeed!
>
> Regards,
> Guto.
>
Is this meet your requirement?
------------------------- Commands Entered -------------------------SELECT * FROM GutoSupplied.products;
PRODUCT_ID PRODUCT_NAME
----------- -------------------- 1 PIZZA 2 BLACK BEER 3 WHITE BEER 4 ANOTHER BEER 5 ICE COLDED BEER
5 record(s) selected.
- Commands Entered -------------------------
SELECT * FROM GutoSupplied.orders;
CUSTOMER_ID PRODUCT_ID
----------- -----------
1 1 1 2 1 3 1 4 2 1 2 2 3 1 3 3 3 4 4 5
10 record(s) selected.
My using DBMS(DB2) is not support CROSS JOIN. Then I used INNER JOIN with ON 0=0.
------------------------- Commands Entered -------------------------SELECT Customer_ID, Product_ID
FROM (SELECT DISTINCT
Customer_ID FROM GutoSupplied.Orders) C INNER JOIN GutoSupplied.Products P ON 0=0 WHERE NOT EXISTS (SELECT * FROM GutoSupplied.Orders O WHERE O.Product_ID = P.Product_ID AND O.Customer_ID = C.Customer_ID) ORDER BY Customer_ID, Product_ID; ------------------------------------------------------------------------------
CUSTOMER_ID PRODUCT_ID
----------- -----------
1 5 2 3 2 4 2 5 3 2 3 5 4 1 4 2 4 3 4 4
10 record(s) selected.
Or
------------------------- Commands Entered -------------------------SELECT Customer_ID, Product_ID
FROM (SELECT C.Customer_ID, P.Product_ID
FROM (SELECT DISTINCT Customer_ID FROM GutoSupplied.Orders) C INNER JOIN GutoSupplied.Products P ON 0=0 ) CP EXCEPT SELECT O.Customer_ID, P.Product_ID FROM GutoSupplied.Orders O INNER JOIN GutoSupplied.Products P ON O.Product_ID = P.Product_ID ORDER BY Customer_ID, Product_ID; ------------------------------------------------------------------------------
CUSTOMER_ID PRODUCT_ID
----------- -----------
1 5 2 3 2 4 2 5 3 2 3 5 4 1 4 2 4 3 4 4
10 record(s) selected. Received on Fri Jan 05 2007 - 18:09:55 CET