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]