I thought about this method before. But since there
are 6 sets of rows I want to update in one table and
they are common at some level, I am wondering whether
there is more efficient way to do it.
Thanks,
--- Michael Stassen <[EMAIL PROTECTED]>
wrote:
> Assuming that column Q3F in your example is really
> Q2F, the query is doing
> exactly what you told it to do. Rows which match
> your WHERE clause are
> being updated according to your SET clause.
>
> As I understand you, there are two different sets of
> rows you wish to
> update. The first set are the rows which match
>
> Q1A = 1 AND Q1E = 1 AND Q1F = 1 AND (Q1G IN ('',
> 'NA'))
>
> while the second set are the rows which match
>
> Q2A = 1 AND Q2E = 1 AND Q2F = 1 AND Q2G IN ('',
> 'NA'))
>
> If you wanted to do the same thing to both sets, one
> update query would make
> sense, but you don't. You want to make one set of
> changes to the first set
> of rows, and a different set of changes to the
> second set of rows. I think
> that calls for two updates:
>
> UPDATE temp
> SET
> Q1E = 6,
> Q1F = 5,
> Q1G = 999
> WHERE Q1A = 1 AND Q1E = 1 AND Q1F = 1 AND (Q1G IN
> ('', 'NA'));
>
> UPDATE temp
> SET
> Q2E = 6,
> Q2F = 5,
> Q2G = 999
> WHERE Q2A = 1 AND Q2E = 1 AND Q2F = 1 AND (Q2G IN
> ('', 'NA'));
>
> Note that, as a bonus, doing it this way eliminates
> the need for the IFs in
> the SET clauses, because their conditions are
> guaranteed to be met by rows
> which match the WHERE clauses.
>
> Michael
>
> Monet wrote:
>
> > I�m trying to update multiple columns at once but
> > cann�t do it in an efficient way.
> > What I am trying to do is:
> > Update table temp,
> > When: ( Q1A=1 AND Q1E=1 AND Q1F=1 AND Q1G IN
> > (��,�NA�) ) THEN SET (Q1E=6,Q1F=5, Q1G=999),
> > OR When ( (Q2A=1 AND Q2E=1 AND Q2F=1 AND Q2G IN
> > (��,�NA�) THEN SET (Q2E=6,Q2F=5,Q2G=999))
> >
> > The record falls in one of above cases should be
> > updated.
> > The query I used is:
> > UPDATE temp
> > SET Q1E = IF(Q1E = 1, 6, Q1E),
> > Q1F = IF(Q1F = 1, 5, Q1F),
> > Q1G = IF(Q1G IN ('','NA'),999, Q1G),
> > Q2E = IF(Q2E = 1, 6, Q2E),
> > Q2F = IF(Q2F = 1, 5, Q2F),
> > Q2G = IF(Q2G IN ('', 'NA'), 999, Q2G),
> > WHERE Q1A = 1 AND Q1E = 1 AND Q1F = 1 AND (Q1G
> IN
> > ('', 'NA'))
> > OR ( Q2A = 1 AND Q2E = 1 AND Q2F = 1 AND
> Q2G
> > IN ('', 'NA'));
> >
> > This query has problem. It also updates the record
> > like following:
> > Before update: Q1A=1,Q1E=1,Q1F=1,Q1G=�NA�, Q2A=1,
> > Q2E=3, Q3F=1;
> > After update: Q1A=1,Q1E=6,Q1F=5,Q1G=999, Q2A=1,
> Q2E=3,
> > Q3F=5.
> > However, since Q2E=3, this record should be:
> > Q1A=1,Q1E=6,Q1F=5,Q1G=999, Q2A=1, Q2E=3, Q3F=1.
> >
> > So, any suggestion?
> >
> > Thanks a lot.
>
>
_______________________________
Do you Yahoo!?
Win 1 of 4,000 free domain names from Yahoo! Enter now.
http://promotions.yahoo.com/goldrush
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]