Re: Curious SQL question
Date: 4 Jan 2007 12:04:53 -0800
Message-ID: <1167941093.742111.73550_at_42g2000cwt.googlegroups.com>
Tonkuma wrote:
> Or
> ------------------------ Commands Entered ------------------------
> SELECT Customer_ID, Product_Name
>   FROM (SELECT C.Customer_ID, Product_Name
>           FROM (SELECT DISTINCT
>                        Customer_ID
>                   FROM Guto.Orders) C
>                        INNER JOIN
>                   Guto.Products
>                     ON 0=0
>        ) CP
>        EXCEPT
>        SELECT O.Customer_ID, Product_Name
>          FROM Guto.Orders   O
>               INNER JOIN
>               Guto.Products P
>                 ON O.Product_ID  = P.Product_ID
>  ORDER BY
>        Customer_ID, Product_Name;
> ------------------------------------------------------------------------------
>
> CUSTOMER_ID PRODUCT_NAME
> ----------- ------------
> john bread
> john wine
> mary shampoo
> mary wine
>
> 4 record(s) selected.
Second sample in my previous post may misleading the meaning of query because of inappropriate indention.
Here is corrected one.
               INNER JOIN
               Guto.Products
                 ON 0=0
These lines moved to left.
------------------------ Commands Entered ------------------------SELECT Customer_ID, Product_Name
FROM (SELECT C.Customer_ID, Product_Name
          FROM (SELECT DISTINCT
                       Customer_ID
                  FROM Guto.Orders) C
               INNER JOIN
               Guto.Products
                 ON 0=0
       ) CP
       EXCEPT
       SELECT O.Customer_ID, Product_Name
         FROM Guto.Orders   O
              INNER JOIN
              Guto.Products P
                ON O.Product_ID  = P.Product_ID
 ORDER BY
       Customer_ID, Product_Name;
Depending on your DBMS, following may result better performance.
SELECT Customer_ID, Product_Name
  FROM (
        (SELECT C.Customer_ID, P.Product_ID
           FROM (SELECT DISTINCT
                        Customer_ID
                   FROM Guto.Orders) C
                INNER JOIN
                Guto.Products P
                  ON 0=0
        )
        EXCEPT
        SELECT Customer_ID, Product_ID
          FROM Guto.Orders
       ) NP
       INNER JOIN
       Guto.Products P
         ON P.Product_ID = NP.Product_ID
 ORDER BY
       Customer_ID, Product_Name;
Received on Thu Jan 04 2007 - 21:04:53 CET
