OK - one more freebie :-)

How about a TEMP table? You can create a temp table, fill it with the
results of your UNION statement and then JOIN it with this new UPDATE
query - that should get you what you need. Note that this is a workaround
for MySQL - in other DBRMS, you can use a sub-SELECT to query the UNION
result set - but for the purposes of MySQL, you're going to have to JOIN on
a TEMP table.

Good Luck!

Dennis

----- Original Message -----
From: "otherguy" <[EMAIL PROTECTED]>
To: "MyLists" <[EMAIL PROTECTED]>
Cc: "MySQL List" <[EMAIL PROTECTED]>
Sent: Saturday, June 28, 2003 6:17 PM
Subject: Re: Advanced Query Help (My brain hurts!)


> Thank you!
>
> That gets me halfway there, and not to my surprise, it's not even that
> hard!  I should've known that it wouldn't be.
>
> So the other part that I truly have no idea how to do the following:
>
> UPDATE this_other_table
> SET satus = ....
> WHERE zipcode IN (<result set from union query blow>);
>
> can someone provide me with some pointers in the right direction?
>
> (SELECT
>   quota_zip2.zipcode
> FROM
>   quota_zip2 INNER JOIN quota_control2 ON
>    (quota_zip2.agent_code = quota_control2.agent_code) AND
>    (quota_zip2.appl = quota_control2.appl)
> WHERE
>   quota_control2.appl = "CIRG"
> GROUP BY quota_zip2.zipcode
> HAVING SUM(quota_control2.quota_actual) >=
> SUM(quota_control2.quota_limit) )
>
> UNION
>
> (SELECT
>   quota_zip2.zipcode
> FROM
>   quota_zip2 INNER JOIN quota_control2 ON
>    (quota_zip2.agent_code = quota_control2.agent_code) AND
>    (quota_zip2.appl = quota_control2.appl)
> WHERE
>   quota_control2.appl = "CILT"
> GROUP BY quota_zip2.zipcode
> HAVING SUM(quota_control2.quota_actual) >=
> SUM(quota_control2.quota_limit) )
>
> ORDER BY zipcode;
>
> Thanks!
> -Cameron Wilhelm
>
> On Friday, June 27, 2003, at 06:42  PM, MyLists wrote:
>
> > How about a UNION statement? If the two queries are independently
> > returning
> > what you need, then you can just "append" the two results by using
> > UNION.
> >
> > Good Luck!
> >
> > Dennis
> >
> > ----- Original Message -----
> > From: "otherguy" <[EMAIL PROTECTED]>
> > To: "MySQL List" <[EMAIL PROTECTED]>
> > Cc: "Terry Vanstory" <[EMAIL PROTECTED]>
> > Sent: Friday, June 27, 2003 8:50 PM
> > Subject: Advanced Query Help (My brain hurts!)
> >
> >
> >> Hey guys, I'm about to dump a doozy on your collective knowledge and
> >> goodwill, and hope for some help or some pointers.  I'm not great with
> >> advanced SQL, and I've gotten as far as my brain and the resources
> >> I've
> >> been using will allow me to get for the time being.
> >>
> >> I need help with two things:
> >> 1) How can I effectively combine the following two queries?  The only
> >> difference between them is the `appl` condition.  I effectively need
> >> to
> >> do an INNER JOIN on the zip code of the results of both queries so
> >> that
> >> only zip codes that exist in both result sets are returned:
> >>
> >> SELECT
> >>   quota_zip2.zipcode,
> >>   SUM(quota_control2.quota_actual) AS sum_actual,
> >>   SUM(quota_control2.quota_limit) AS sum_limit
> >> FROM
> >>   quota_zip2 INNER JOIN quota_control2 ON
> >>    (quota_zip2.agent_code = quota_control2.agent_code) AND
> >>    (quota_zip2.appl = quota_control2.appl)
> >> WHERE
> >>   quota_control2.appl = "CIRG"
> >> GROUP BY quota_zip2.zipcode
> >> HAVING sum_actual >= sum_limit
> >> ORDER BY quota_zip2.zipcode;
> >>
> >> SELECT
> >>   quota_zip2.zipcode,
> >>   SUM(quota_control2.quota_actual) AS sum_actual,
> >>   SUM(quota_control2.quota_limit) AS sum_limit
> >> FROM
> >>   quota_zip2 INNER JOIN quota_control2 ON
> >>    (quota_zip2.agent_code = quota_control2.agent_code) AND
> >>    (quota_zip2.appl = quota_control2.appl)
> >> WHERE
> >>   quota_control2.appl = "CILT"
> >> GROUP BY quota_zip2.zipcode
> >> HAVING sum_actual >= sum_limit
> >> ORDER BY quota_zip2.zipcode;
> >>
> >> I cannot change the where clause to
> >> WHERE `appl` = "CIRG" OR `appl` = "CILT"
> >> because there might be data that would result in a situation where the
> >> the sum_actual would meet or exceed the sum_limit for a zip code
> >> (using
> >> both `appl`'s in the where), whereas running them separately would
> >> result in the sum_actual not being met for one of the `appl`'s for
> >> that
> >> zip_code (it would have been exceeded for the other `appl`).
> >>
> >> 2) Once I have this query, how can I then update a third table based
> >> on
> >> it?  I basically need to run:
> >> UPDATE listmaster SET status = "WD" WHERE zipcode = <any zipcode in
> >> results of the query from above>.
> >>
> >> I think that this would involve another inner join, but at this point
> >> I'm _WAY_ over my head.
> >>
> >> I've included a dump of sample tables and data at the end of this
> >> e-mail.
> >>
> >> For the record:
> >> 1) I know that this whole thing would be easier to do programatically
> >> (it would take a while, but even I could do it that way).
> >> Unfortunately due to complications of the environment over which I
> >> have
> >> absolutely no control, that's not an option.
> >>
> >> 2) This database is not of my design.
> >>
> >> 3) This will eventually go into a nightly maintenance job, so query
> >> execution time is not a big issue.
> >>
> >> Finally, in advance, I really appreciate any time and effort any of
> >> you
> >> are willing to put in.  Hopefully there's someone out there that
> >> enjoys
> >> figuring stuff like this out who has more expertise than I do.  Any
> >> assistance rendered will result in many thanks from me.
> >>
> >> Thanks again,
> >> -Cameron Wilhelm
> >>
> >> -=-=-=-=-=-=-=BEGIN DUMP OF SAMPLE DATA=-=-=-=-=-=-=-=-=-
> >>
> >> # Tables dumped 2003-06-27 19:08:11 -0600
> >> # Created by CocoaMySQL (Copyright (c) 2002-2003 Lorenz Textor)
> >> #
> >> # Host: localhost   Database: nbl_test
> >> # ******************************
> >>
> >> # Dump of table listmaster
> >> # ------------------------------
> >>
> >> CREATE TABLE `listmaster` (
> >>    `id` int(11) NOT NULL auto_increment,
> >>    `zipcode` char(5) default NULL,
> >>    `status` char(2) default NULL,
> >>    PRIMARY KEY  (`id`),
> >>    UNIQUE KEY `id` (`id`)
> >> ) TYPE=MyISAM;
> >>
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("1","11111","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("2","11111","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("3","11111","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("4","11111","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("5","22222","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("6","22222","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("7","22222","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("8","22222","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("9","33333","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("10","33333","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("11","33333","NC");
> >> INSERT INTO `listmaster` (`id`,`zipcode`,`status`) VALUES
> >> ("12","33333","NC");
> >>
> >>
> >> # Dump of table quota_control2
> >> # ------------------------------
> >>
> >> CREATE TABLE `quota_control2` (
> >>    `agent_code` char(6) default NULL,
> >>    `appl` char(4) default NULL,
> >>    `quota_limit` smallint(6) default NULL,
> >>    `quota_actual` smallint(6) default NULL,
> >>    UNIQUE KEY `agent_code` (`agent_code`,`appl`)
> >> ) TYPE=MyISAM;
> >>
> >> INSERT INTO `quota_control2`
> >> (`agent_code`,`appl`,`quota_limit`,`quota_actual`) VALUES
> >> ("a1","CIRG","10","10");
> >> INSERT INTO `quota_control2`
> >> (`agent_code`,`appl`,`quota_limit`,`quota_actual`) VALUES
> >> ("a2","CIRG","5","6");
> >> INSERT INTO `quota_control2`
> >> (`agent_code`,`appl`,`quota_limit`,`quota_actual`) VALUES
> >> ("a2","CILT","5","0");
> >> INSERT INTO `quota_control2`
> >> (`agent_code`,`appl`,`quota_limit`,`quota_actual`) VALUES
> >> ("a3","CILT","5","0");
> >>
> >>
> >> # Dump of table quota_zip2
> >> # ------------------------------
> >>
> >> CREATE TABLE `quota_zip2` (
> >>    `agent_code` char(6) default NULL,
> >>    `appl` char(4) default NULL,
> >>    `zipcode` char(5) default NULL,
> >>    UNIQUE KEY `agent_code` (`agent_code`,`appl`,`zipcode`)
> >> ) TYPE=MyISAM;
> >>
> >> INSERT INTO `quota_zip2` (`agent_code`,`appl`,`zipcode`) VALUES
> >> ("a1","CIRG","11111");
> >> INSERT INTO `quota_zip2` (`agent_code`,`appl`,`zipcode`) VALUES
> >> ("a1","CIRG","22222");
> >> INSERT INTO `quota_zip2` (`agent_code`,`appl`,`zipcode`) VALUES
> >> ("a2","CILT","22222");
> >> INSERT INTO `quota_zip2` (`agent_code`,`appl`,`zipcode`) VALUES
> >> ("a2","CIRG","22222");
> >> INSERT INTO `quota_zip2` (`agent_code`,`appl`,`zipcode`) VALUES
> >> ("a3","CILT","11111");
> >> INSERT INTO `quota_zip2` (`agent_code`,`appl`,`zipcode`) VALUES
> >> ("a3","CILT","22222");
> >> INSERT INTO `quota_zip2` (`agent_code`,`appl`,`zipcode`) VALUES
> >> ("a3","CILT","33333");
> >>
> >>
> >> --
> >> MySQL General Mailing List
> >> For list archives: http://lists.mysql.com/mysql
> >> To unsubscribe:
> >> http://lists.mysql.com/[EMAIL PROTECTED]
> >>
> >>
> >
> >
>
>


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to