I don't claim to be a master of SQL, but isn't "select b + 1 as c" its
own query, without access to the "2 as b" in the outer query?
On 4/2/06, Alexander Kozlovsky <[EMAIL PROTECTED]> wrote:
> 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]
>
>
--
Cory Nelson
http://www.int64.org