As a follow up, what I meant to ask is why it doesn't work.

I rewrote the original select:
SELECT "Categories"."Category_Name", "Strings"."Long_Text", 
"Units"."Long_Units", "Limits"."Lower_Limit", "Limits"."Upper_Limit"
FROM ((((Objects INNER JOIN (Categories INNER JOIN Object_Categories ON 
"Categories"."Category_ID"="Object_Categories"."Category_ID") ON 
"Objects"."Object_ID"="Object_Categories"."Object_ID") INNER JOIN Units ON 
"Objects"."Unit_ID"="Units"."Unit_ID") INNER JOIN Strings ON 
"Objects"."String_ID"="Strings"."String_ID") INNER JOIN Addresses ON 
"Objects"."Address_ID"="Addresses"."Address_ID") INNER JOIN Limits ON 
"Objects"."Limit_ID"="Limits"."Limit_ID"
WHERE ((("Categories"."Category_Type_ID")=1));

To:
SELECT "Categories"."Category_Name", "Strings"."Long_Text", 
"Units"."Long_Units", "Limits"."Lower_Limit", "Limits"."Upper_Limit"
FROM (((((Categories INNER JOIN Object_Categories ON 
"Categories"."Category_ID"="Object_Categories"."Category_ID") INNER JOIN 
Objects ON "Objects"."Object_ID"="Object_Categories"."Object_ID") INNER JOIN 
Units ON "Objects"."Unit_ID"="Units"."Unit_ID") INNER JOIN Strings ON 
"Objects"."String_ID"="Strings"."String_ID") INNER JOIN Addresses ON 
"Objects"."Address_ID"="Addresses"."Address_ID") INNER JOIN Limits ON 
"Objects"."Limit_ID"="Limits"."Limit_ID"
WHERE ((("Categories"."Category_Type_ID")=1));

Which does seem to work.  Is my rewrite the same as the original?

Vance




on Mar 12, 2013, ven...@intouchmi.com wrote:
>
>Dominique,
>
>Thanks for your response and for breaking down the select into manageable 
>pieces!
>
>According to the limits info, there should be no problem with the # of terms 
>in that
>select statement (< 500).
>
>There are hundreds of these predefined queries that I am extracting out of the 
>MS
>access databases, so it is unlikely that I'd be able to break them down into 
>component
>queries, particularly since they are already referenced as named (predefined) 
>queries
>in the software out in the field.
>I was hoping to move away from Access toward SQLite if feasible.  I feel that 
>it would
>be faster and easier to port to other platforms.
>
>I'm not an SQL expert either, but you're certainly better at it than I am.  I 
>get
>lost after a couple of joins. I wonder if there is a way to re-arrange the 
>joins
>so that the select would be acceptable to SQLite.
>
>Vance
>
>on Mar 12, 2013, Dominique Devienne <ddevie...@gmail.com> wrote:
>>
>>I'm no expert, but I think your problem comes from the excessive
>>parentheses you are using.
>>
>>Below's a little experiment that reproduces your syntax, with its error,
>>and provides an alternative simpler syntax that works. --DD
>>
>>C:\Users\DDevienne>sqlite3
>>SQLite version 3.7.15.2 2013-01-09 11:53:05
>>Enter ".help" for instructions
>>Enter SQL statements terminated with a ";"
>>sqlite> create table a (id number);
>>sqlite> create table b (id number, a number);
>>sqlite> create table c (id number, b number);
>>sqlite> create view v1 as select a.id, b.id, c.id
>>   ...> from (c INNER JOIN (a INNER JOIN b on a.id = b.a) on c.b = b.id)
>>   ...> where (((a.id) = 1));
>>Error: no such column: a.id
>>sqlite>
>>sqlite> create view v1 as select a.id, b.id, c.id
>>   ...> from
>>   ...> a INNER JOIN b on a.id = b.a
>>   ...>   INNER JOIN c on b.id = c.b
>>   ...> where a.id = 1;
>>sqlite>
>>
>>
>>On Tue, Mar 12, 2013 at 3:42 PM, <ven...@intouchmi.com> wrote:
>>
>>>
>>> Hello,
>>>
>>> Using sqlite3, I entered this create view statement:
>>> CREATE VIEW IF NOT EXISTS "Annies Form" AS
>>> SELECT Categories.Category_Name, Strings.Long_Text, Units.Long_Units,
>>> Limits.Lower_Limit, Limits.Upper_Limit
>>> FROM ((((Objects INNER JOIN (Categories INNER JOIN Object_Categories ON
>>> Categories.Category_ID=Object_Categories.Category_ID) ON
>>> Objects.Object_ID=Object_Categories.Object_ID) INNER JOIN Units ON
>>> Objects.Unit_ID=Units.Unit_ID) INNER JOIN Strings ON
>>> Objects.String_ID=Strings.String_ID) INNER JOIN Addresses ON
>>> Objects.Address_ID=Addresses.Address_ID) INNER JOIN Limits ON
>>> Objects.Limit_ID=Limits.Limit_ID
>>> WHERE (((Categories.Category_Type_ID)=1));
>>>
>>> sqlite3 complains that the column Categories.Category_Name does not exists.
>>> Yet, I can do a
>>> Select Categories.Category_Name From Categories
>>> with no problems.
>>>
>>> This create view worked as well:
>>> CREATE VIEW IF NOT EXISTS 'Select_Categories' AS
>>> SELECT Categories.Category_ID, Categories.Category_Name,
>>> Strings.Long_Text, Strings.Short_Text, Strings.Alternate_Text,
>>> Category_Types.Category_Type
>>> FROM (Categories INNER JOIN Strings ON Categories.String_ID =
>>> Strings.String_ID) INNER JOIN Category_Types ON Categories.Category_Type_ID
>>> = Category_Types.Category_Type_ID;
>>>
>>> As a side note, these were predefined queryDefs from an MS Access db that,
>>> I believe, work OK.
>>>
>>> Vance
>>> _______________________________________________
>>> sqlite-users mailing list
>>> sqlite-users@sqlite.org
>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>>
>>_______________________________________________
>>sqlite-users mailing list
>>sqlite-users@sqlite.org
>>http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@sqlite.org
>http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to