  Nested relational query languages have been explored extensively, and
underlie industrial language-integrated query systems such as Microsoft's LINQ.
However, relational databases do not natively support nested collections in
query results. This can lead to major performance problems: if programmers
write queries that yield nested results, then such systems typically either
fail or generate a large number of queries. We present a new approach to query
shredding, which converts a query returning nested data to a fixed number of
SQL queries. Our approach, in contrast to prior work, handles multiset
semantics, and generates an idiomatic SQL:1999 query directly from a normal
form for nested queries. We provide a detailed description of our translation
and present experiments showing that it offers comparable or better performance
than a recent alternative approach on a range of examples.
