【问题标题】:distinct-values() in return result does not work?返回结果中的 distinct-values() 不起作用?
【发布时间】:2012-11-18 09:53:21
【问题描述】:

我是 XQuery 的新手,我的问题是关于不同的值,我正在使用以下代码来检索电影评论家

xquery version "1.0";
declare boundary-space preserve;
<result>
{for $reviews in doc("reviews.xml")/reviews/review,
     $movie in doc("movies.xml")/movies/movie
 where $reviews/movie_title = $movie/movie_title
   and $movie//movie_genre = "Drama"
   and $movie//month > 6
 order by $reviews/movie_reviewer descending
 return
(<reviewer>{distinct-values($reviews/movie_reviewer)}</reviewer>, '&#xa;')
 }
 </result>

后来我把代码改成

xquery version "1.0";
declare boundary-space preserve;
<result>
{for $reviews in doc("reviews.xml")/reviews/review,
     $movie in doc("movies.xml")/movies/movie
 where $reviews/movie_title = $movie/movie_title
   and $movie//movie_genre = "Drama"
   and $movie//month > 6
 return
{for $content in distinct-values($reviews/movie_reviewer)
      order by $content descending
      return (<reviewer>{$content}</reviewer>, '&#xa;')}
 }
 </result>

但我得到的结果与

相似
 <result>
 <reviewer>Wesley Barry</reviewer>
 <reviewer>Michael Gordon</reviewer>
 <reviewer>Michael Gordon</reviewer>
 <reviewer>Michael Gordon</reviewer>
 <reviewer>John Frankenheimer</reviewer>
 <reviewer>J. Lee Thompson</reviewer>
 <reviewer>J. Lee Thompson</reviewer>
 <reviewer>Charles Walters</reviewer>
 <reviewer>Charles Walters</reviewer>
 </result>

我怎样才能使结果像

<result>
 <reviewer>Wesley Barry</reviewer>
 <reviewer>Michael Gordon</reviewer>
 <reviewer>John Frankenheimer</reviewer>
 <reviewer>J. Lee Thompson</reviewer>
 <reviewer>Charles Walters</reviewer>
 </result>

? 我知道这是很基本的,但我就是不明白

【问题讨论】:

  • 请发布数据,例如。在gist.github.com 上(并将其添加到您的问题中)!判断问题在很大程度上取决于数据的结构。

标签: xquery


【解决方案1】:

请听从@Ranon 的建议。但是,从您的查询中猜测:最简单的方法是您是否可以使用 XQuery 3.0 和新的 group-by-statement。

xquery version "3.0";
declare boundary-space preserve;
<result>
{for $reviews in doc("reviews.xml")/reviews/review,
     $movie in doc("movies.xml")/movies/movie
 let $reviewer := $reviews/movie_reviewer
 where $reviews/movie_title = $movie/movie_title
   and $movie//movie_genre = "Drama"
   and $movie//month > 6
 group by $reviewer
 order by $reviewer descending
 return
(<reviewer>{$reviewer}</reviewer>, '&#xa;')
 }
 </result>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-15
    • 2014-07-10
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多