On Tue, Apr 14, 2009 at 3:47 PM, Barney Boisvert <bboisv...@gmail.com> wrote:
> Did they have an example of a query equivalent to mine that uses the
> data function?  Because it seems like that'd probably be more
> efficient than going through an XML process.

MSDN actually used almost exactly what you wrote. If you go to the MSDN page:
http://msdn.microsoft.com/en-us/library/ms189885(SQL.90).aspx

And look down for "C. Generating a value list using PATH mode" it
shows their example.

The only real difference is that they were using AS "data()" which I
am not familiar with. It might be because the result returned from the
subquery in their example is being put into a tsql variable and then
used in another xml path query.

Here is the subquery in their example:

 (SELECT ProductID as "data()"
       FROM   Production.Product
       WHERE  Production.Product.ProductModelID =
              Production.ProductModel.ProductModelID
       FOR XML PATH ('')) as "@ProductIDs"

Cheers
Judah


> On Tue, Apr 14, 2009 at 3:13 PM, Judah McAuley <ju...@wiredotter.com> wrote:
>>
>> Barney, that TSQL is brilliant. I've never used the Stuff function and
>> had only used FOR XML PATH when generating xml. I had to go look at
>> the books online and sure enough they have an example turning results
>> into a value list in the same way that you are although they do the
>> select as data(). I'm not familiar with the data() function and why
>> they would use it but your query doesn't Would you mind elaborating?
>>
>> And for those interested in what I'm talking about his Barney's use of
>> FOR XML PATH, the msdn reference is here:
>> http://msdn.microsoft.com/en-us/library/ms189885(SQL.90).aspx
>>
>> Thanks,
>> Judah
>>
>> On Tue, Apr 14, 2009 at 1:20 PM, Barney Boisvert <bboisv...@gmail.com> wrote:
>>>
>>> Here you go.  Note that they're not really semantically equivalent,
>>> they just happen to return the same results.  The approach for
>>> obtaining the result is completely different, and the MS SQL one,
>>> while less direct for the actual comma separate list creation, is far
>>> more expressive for what you're actually trying to accomplish (i.e.
>>> uses a correlated subquery instead of a grouped join).
>>>
>>> MySQL:
>>> select name, group_concat(phone) as phones
>>> from client
>>>  inner join phone on client.id = phone.clientId
>>> group by name
>>>
>>> MS SQL Server:
>>> select name,
>>> stuff((
>>>  select distinct ',' + phone
>>>  from phone
>>>  where clientId = client.id
>>>  for xml path ('')
>>> ), 1, 1, '') as phones
>>> from client
>>>
>>> cheers,
>>> barneyb
>>>
>>> On Tue, Apr 14, 2009 at 12:31 PM, C. Hatton Humphrey
>>> <chumph...@gmail.com> wrote:
>>>>
>>>> Is there a MSSQL version of that puppy?
>>>>
>>>> On Tue, Apr 14, 2009 at 3:19 PM, Andy Matthews <li...@commadelimited.com> 
>>>> wrote:
>>>>>
>>>>> Nice. So group_concat works sort of like ColdFusion's valuelist method. 
>>>>> Very
>>>>> nice indeed!
>>>>>
>>>>> -----Original Message-----
>>>>> From: Richard White [mailto:rich...@j7is.co.uk]
>>>>> Sent: Tuesday, April 14, 2009 2:59 PM
>>>>> To: cf-talk
>>>>> Subject: Re: expert sql challenge
>>>>>
>>>>>
>>>>> thanks for all your replies.
>>>>>
>>>>> barney, yes we are using mysql and didnt even know about the qroup_concat.
>>>>> it works like a dream and where this task was taking 23 seconds to 
>>>>> complete
>>>>> it is now taking a matter of milliseconds :)
>>>>>
>>>>> fantastic and thanks once again for all your replies :)
>>>>>
>>>>>>What DB are you using?  If it's MySQL, you can use this:
>>>>>>
>>>>>>select client.name, group_concat(clientphone.number) as phone numbers
>>>>>>from client
>>>>>>  left outer join clientphone on client.id = clientphone.clientId group
>>>>>>by client.name
>>>>>>
>>>>>>If it's MS SQL Server you can use a subquery with FOR XML PATH and
>>>>>>STUFF to approximate the same functionality.  Don't know about other
>>>>>>platforms.
>>>>>>
>>>>>>At the very least, pull a single recordset with the same JOIN as above,
>>>>>>but no GROUP BY, and then you can do the "rollup" in a single CFOUTPUT
>>>>>>loop.  That'll save you a lot of trips to the DB, and therefor a lot of
>>>>>>wasted time.
>>>>>>
>>>>>>cheers,
>>>>>>barneyb
>>>>>>
>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
> 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to 
date
Get the Free Trial
http://ad.doubleclick.net/clk;207172674;29440083;f

Archive: 
http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:321600
Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

Reply via email to