The CREATE TABLE ... SELECT ... command is all one command. You weren't supposed to break it up. Sorry if I didn't make that very clear (my fault!!).
You should probably be on a SCRIPT tab not a QUERY tab if you are running this through QueryBrowser in order to execute more than one statement at a time. I don't use it very often but I think that QB doesn't maintain connections between calls on the same tab (can't remember and can't test right now) and IIRC, the QUERY tabs only take one command at a time. Shawn Green Database Administrator Unimin Corporation - Spruce Pine "Imran" <[EMAIL PROTECTED]> wrote on 10/11/2005 12:00:25 PM: > Hi Shawn: > > I tried to run the sequences as you suggested in MySql Query Browser. I ran > the first part with the create temp table then I ran the second select to > see the result but when I tried the second SQL to get the created rows I get > the message 'Table xxxx.tmpTotals doesn't exist' where xxxx=schema name. > > In additon, THANK you for taking the time to clarify the confusion about > connections .. you are a wealth of information. > > best regards > Imran > > > > ----- Original Message ----- > From: <[EMAIL PROTECTED]> > To: "Imran" <[EMAIL PROTECTED]> > Cc: <mysql@lists.mysql.com> > Sent: Tuesday, October 11, 2005 11:33 AM > Subject: Re: Help on writing a sql statement > > > > Will you have name collisions with the same temporary table names used > > from different connections? Nope. > > > > Temporary tables and user-defined (@-variables) are connection-specific. > > Even if the same username/password combination is used to create several > > connections, each connection will have its own set of user-defined > > variables and temporary tables. What may get confusing is if you are using > > a connection pool manager (like ODBC) and you pick up a connection that > > you thought was "new" but was really just "recycled". > > > > When you request a connection and close one and you are behind a > > connection pool manager, the manager doesn't actually create and destroy > > new connections each time. It merely loans you one it already has open and > > it will open or close the connections as it sees fit. When you try to > > close the connection, all you are really doing is telling the manager that > > it is OK for some other thread/process to use it. So long as you do not > > assume a variable to have a particular value unless you set it to be > > something (do not assume that a variable you haven't set is still null) > > and so long as you destroy any temporary tables when you are through using > > them, you shouldn't run into any "inheritance" problems from thread to > > thread. > > > > The good thing is that in the case of ODBC (at least on Win32) you can > > decide for each driver if you want the ODBC connection manager to pool > > connections or not. > > > > Make sense? > > > > Shawn Green > > Database Administrator > > Unimin Corporation - Spruce Pine > > > > "Imran" <[EMAIL PROTECTED]> wrote on 10/11/2005 11:19:20 AM: > > > > > Hi Shawn: > > > > > > Thank you very much for your solution. It certainly helped me in > > > understanding SQL a whole deal more. > > > > > > I Have one followup question as to the proposed solution, This query > > will be > > > used in a multi-user situation and the logon to the database will be the > > > same user (a web based app) ... Since I am creating a temp table, will > > the > > > temp table creation fail for subsequent users prior to the drop i.e. the > > > table will exist already exist .... > > > > > > > > > best regards > > > Imran. > > > > > > ----- Original Message ----- > > > From: <[EMAIL PROTECTED]> > > > To: "Imran" <[EMAIL PROTECTED]> > > > Cc: <mysql@lists.mysql.com> > > > Sent: Tuesday, October 11, 2005 9:49 AM > > > Subject: Re: Help on writing a sql statement > > > > > > > > > > (my response bottom-posted. See below - SG) > > > > > ----- Original Message ----- > > > > > From: <[EMAIL PROTECTED]> > > > > > To: "Imran" <[EMAIL PROTECTED]> > > > > > Cc: <mysql@lists.mysql.com> > > > > > Sent: Monday, October 10, 2005 4:17 PM > > > > > Subject: Re: Help on writing a sql statement > > > > > > > > > > > > > > > > "Imran" <[EMAIL PROTECTED]> wrote on 10/10/2005 03:52:21 PM: > > > > > > > > > > > > > Hi all: > > > > > > > I need some help in writing a sql statement. > > > > > > > > > > > > > > I have three tables (Sales, Cust and Product). The sales table > > > > contains > > > > > > a > > > > > > > large volume of data and I want to create a sql to group the > > sales > > > > table > > > > > > > then join the resultant to both the Cust and Prod and to have > > > > additional > > > > > > > fields selected from the Cust and Prod. > > > > > > > > > > > > > > So in effect something like (obviously syntax is wrong) > > > > > > > > > > > > > > Select sm.prodno, sm.custno, sum(cost) as costs, sum(sales) as > > > > sales, > > > > > > > sm.date > > > > > > > > > > > > > > from Sales SM where sm.date <= date(‘2005-09-01 00:00:00’) Group > > by > > > > > > > sm.prodno, sm.custno, sm.date , > > > > > > > > > > > > > > (Select prod.desc, prod.code, cust.custno, cust.name from cust, > > > > Prod) > > > > > > left > > > > > > > join sm.prodno = prod.code left join sm.custno=cust.custno) … > > > > > > > > > > > > > > Any help would be greatly appreciated. > > > > > > > > > > > > > > > > > > > OK, you know you need a GROUP BY, that's good. You also recognized > > you > > > > > > needed to JOIN a few tables together, also good. There are at > > least > > > > two > > > > > > ways to do what you ask. One is a fairly complex query that does > > it > > > > all in > > > > > > one statement (might take a long time to compute) the other is a > > > > sequence > > > > > > of two simpler statements. I think the two-statement solution will > > be > > > > > > easier to understand and maintain so I would prefer to go over > > that. > > > > > > However, in order to provide an example of either method I will > > need > > > > more > > > > > > information from you. > > > > > > > > > > > > From the CLI (command line client), please provide the output from > > > > these > > > > > > three commands: > > > > > > > > > > > > SHOW CREATE TABLE sales\G; > > > > > > SHOW CREATE TABLE cust\G; > > > > > > SHOW CREATE TABLE product\G; > > > > > > > > > > > > That will tell me exactly which columns live on which tables and > > where > > > > you > > > > > > do or do not have any indexes. Good indexes will make or break the > > > > > > performance of your database. You will not be exposing any data, > > only > > > > the > > > > > > design of the tables. > > > > > > > > > > > > Please remember to CC the list on all responses. > > > > > > > > > > > > Shawn Green > > > > > > Database Administrator > > > > > > Unimin Corporation - Spruce Pine > > > > > > > > > > > > > > Let me see if I can translate what you want in a query into regular > > > > language. I think you would like to see, grouped by date, customer, > > and > > > > product, the total cost and total sales for each > > (date,customer,product) > > > > triple along with each product's description ,code, and the customer's > > > > number and name. All of that will be limited to activity on or before > > > > midnight of a certain date. > > > > > > > > If I rephrased that correctly, here is how I would build your query. > > Step > > > > 1 is to perform the (date,customer,product) summations. By minimizing > > the > > > > number of rows, columns, and/or tables we need to summarize against, > > we > > > > improve performance. So I do this part of the analysis before I join > > in > > > > the other tables. > > > > > > > > Note: Date, time, and datetime literals are represented by > > single-quoted > > > > strings. You do not need the DATE() function to create a date literal. > > > > > > > > > > > > CREATE TEMPORARY TABLE tmpTotals ( > > > > key(CustNo) > > > > , key(ProdNo) > > > > ) > > > > SELECT PostingDate > > > > , CustNo > > > > , ProdNo > > > > , sum(Cost) as costs > > > > , sum(Sales) as sales > > > > FROM salesmaster > > > > WHERE PostingDate <= '2005-09-01 00:00:00' > > > > GROUP BY PostingDate, CustNo, ProdNo; > > > > > > > > Step 2: collect the rest of the information for the report. > > > > SELECT CustNo > > > > , c.Name as custname > > > > , ProdNo > > > > , p.Name as prodname > > > > , costs > > > > , sales > > > > , PostingDate > > > > FROM tmpTotals tt > > > > LEFT JOIN customerintermediate c > > > > ON c.CustNo = tt.CustNo > > > > LEFT JOIN productintermediate p > > > > ON p.ProdNo = tt.ProdNo > > > > ORDER BY ... your choice... ; > > > > > > > > Step 3: The database is not your momma. Always clean up after > > yourself. > > > > > > > > DROP TEMPORARY TABLE tmpTotals; > > > > > > > > And you are done! The only trick to doing a sequence of statements in > > a > > > > row (like this) is that they all have to go through the same > > connection. > > > > As long as you do not close and re-open the connection between > > statements, > > > > any temp tables or @-variables you create or define remain in > > existence > > > > for the life of the connection. Depending on your connection library, > > you > > > > might be able to execute all three statements from a single request. > > Most > > > > likely, you will need to send them in one-at-a-time. > > > > > > > > Does this help you to organize your thoughts? > > > > > > > > Shawn Green > > > > Database Administrator > > > > Unimin Corporation - Spruce Pine > > > > > > > > > > > > > > > >