Hello!
Can anybody tell me, what is wrong with this simple query:

    select a, (select c
               from (select b + 1 as c) as Table2) as d
    from (select 1 as a, 2 as b) as Table1

The error arise at line 2 ("no such column: b").
AFAIK, the syntax is perfectly correct.

This error arise when query contains double-nested subquery
in its SELECT clause, and the inner subqery refers on columns
of the main query.

I think, this is bug in SQLite, but I'm not entirely sure,
because similar error arise in MS SQL Server 2000.

Any thought?

-----------------------------------------------------------

Below is (almost) real-life example of query with double-nested
subquery in SELECT clause, which refers on columns of the main
query. Consider this tables:


    create table Products
    (
        name text primary key
    );

    create table Orders
    (
        order_date  timestamp  not null,
        order_id    integer    not null,

        -- orders with different dates can have same id
        primary key (order_date, order_id)
    );

    create table OrderDetails
    (
        order_date    timestamp,
        order_id      integer,
        product_name  text,
        amount        integer     not null,

        primary key (order_date, order_id, product_name),
        foreign key (order_date, order_id)
                references Orders (order_date, order_id),
        foreign key (product_name)
                references Products (name)
    );

    
The question is: "for each pair of products calculate number of orders
where this two products has been shipped together" (I'm sorry if my
English is not correct). One of possible solutions is:


    select X, Y, (select count(*)
                  from (select order_date, order_id
                        from OrderDetails where product_name = X
                        intersect
                        select order_date, order_id
                        from OrderDetails where product_name = Y) as Table2
                  ) as Z
    from (select P1.name as X, P1.name as Y
          from Products P1, Products P2
          where P1.name < P2.name) as Table1

          
This query does not work, because SQLite complaints on comparisons
"product_name = X" and "product_name = Y".

I solve this problem by rewriting of the original query as:

    select D1.product_name, D2.product_name, count(*)
    from OrderDetails D1 inner join OrderDetails D2
         using (order_date, order_id)
    where D1.product_name < D2.product_name
    group by D1.product_name, D2.product_name

But (IMHO) original query is also correct. Is I'm mistaken?
    

-- 
Best regards,
 Alexander                mailto:[EMAIL PROTECTED]

Reply via email to