Steve Meyers wrote:

> There are no subselects in MySQL (yet).  However, they're usually a bad
> idea anyway, which is why it's never been such a big rush to get them in. 


Sometimes (just sometimes), there is no way to do it except with a subselect.

For instance, we have a table where we get record updates of a 'file' 
(filename, last-update time, handle to where this version of the file 
contents are kept).

The way to get the most recent version of each file is

  select filename, received_time, handle
   from file_updates
   where (filename, received_time) in
        (select unique filename, max(received_time)
        from file_updates
        group by orig_file_path);

This is elegant and reasonably efficient (as long as there's an index on 
(filename, received_time)).

There is no equivalent join or outer join statement that can express this.

The temporary-table solution is somewhat MySQL-specific. The only 
*portable* way to do this across DBs is to also maintain some other 
boolean flag ("latest"), keep that correctly updated as new updates come 
in, and search on that (which is what we'll be doing in the interests of 
efficiency).
--
Shankar.


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to