using UPDATE with GROUP By

Bart Pietercil bart.pietercil at cognosis.be
Mon Jun 21 11:45:15 CDT 2010


Hi Ivan

this is interesting. So you can do

>> select
>>    GROUP_CONCAT(RecID),
>>    d_address_LineNumber,
>>    d_address_clients_ref,
>>    count(d_address_clients_ref) as SomeName
>> from
>>    data_address
>> group by
>>    d_address_LineNumber
>>    d_address_clients_ref
>> having
>>    SomeName = 2



without having to write in the group by part the recid ? How come ? It was my understanding that any field used in the select had to be in the group by part ?

tia



Bart Pietercil
CTO Cognosis NV



On 21 Jun 2010, at 18:35, william humphrey wrote:

> Yes that is exactly one of the groups I wish to update.
> 
> On Mon, Jun 21, 2010 at 11:28 AM, Ivan Smahin
> <ivan_smahin at paradigmasoft.com> wrote:
>> Hello william,
>> 
>> Sunday, June 20, 2010, 7:35:23 PM, you wrote:
>> 
>>> I'm trying to assign a number to the d_address_linenumber field that
>>> is 1, 2 ,3 or 4 arbitrarily in sequence for each d_address_client
>>> reference number. Most of the records have just one address for a
>>> client reference number and so the d_address_linenumber for those
>>> majority of records would be one. But some of the client reference
>>> numbers have two addresses and a few have three or four.
>> 
>>> It's odd that you don't see the data in that zipped file.
>> 
>>> On Sun, Jun 20, 2010 at 11:54 AM, Bart Pietercil
>>> <bart.pietercil at cognosis.be> wrote:
>>>> Hm,
>>>> 
>>>> suspecting a flaw in your logic; can you describe me what you want to do (limited to the tables we're looking at).
>>>> I have to leave now but I'll try to look at the db and your explanation this evening late or maybe tomorrow
>>>> 
>>>> 
>>>> Bart Pietercil
>>>> CTO Cognosis NV
>>>> 
>>>> 
>>>> 
>>>> On 20 Jun 2010, at 17:22, william humphrey wrote:
>>>> 
>>>>> Same thing with this:
>>>>> 
>>>>> UPDATE data_address SET d_address_LineNumber = 1 WHERE
>>>>> d_address_LineNumber IN (select d_address_LineNumber from
>>>>> (select d_address_LineNumber, d_address_clients_ref, count
>>>>> (d_address_clients_ref) as SomeName
>>>>> from data_address
>>>>> group by d_address_LineNumber,d_address_clients_ref
>>>>> having SomeName = 1)
>>>>> )
>>>>> 
>>>>> All 8150 rows are affected an set to 1. GEEZ!
>> 
>> Following this query it is correct.
>> 
>> Look - your subquery alone returns some set of records BUT
>> d_address_LineNumber for each that record is 0.
>> 
>> So  it  sounds  like  "update  ...  where d_address_LineNumber IN (0,0,..,0)
>> And  you  get  all records filled with 2 because almost all records in
>> the table filled with d_address_LineNumber = 0.
>> 
>> -
>> Instead you should get a set of records identified by something unique
>> - say recID.
>> 
>> But  you use grouping ... Well in each group might be few recIds and I
>> don't  get  your  point - what the records you want to update?
>> 
>> 
>> 
>> select
>>    GROUP_CONCAT(RecID),
>>    d_address_LineNumber,
>>    d_address_clients_ref,
>>    count(d_address_clients_ref) as SomeName
>> from
>>    data_address
>> group by
>>    d_address_LineNumber
>>    d_address_clients_ref
>> having
>>    SomeName = 2
>> 
>> 
>> Do you want update that list of recIDs???
>> 
>> 
>> 
>> --
>> Best regards,
>> Ivan Smahin
>> Senior Software Engineer
>> Paradigma Software, Inc
>> Valentina - The Ultra-Fast Database
>> http://www.valentina-db.com
>> 
>> _______________________________________________
>> Valentina mailing list
>> Valentina at lists.macserve.net
>> http://lists.macserve.net/mailman/listinfo/valentina
>> 
> 
> 
> 
> -- 
> http://www.bluewatermaritime.com
> _______________________________________________
> Valentina mailing list
> Valentina at lists.macserve.net
> http://lists.macserve.net/mailman/listinfo/valentina



More information about the Valentina mailing list