【问题标题】:Union together with order by in mysqlmysql中的联合与order by
【发布时间】:2013-05-03 13:05:42
【问题描述】:

我需要将两个表的第一列放在一行中,按这两列排序。这是我能够写的,但它不起作用。

select title from movie 
union 
select reviewer_name from reviewer 
order by title,reviewer_name;

Mysql 说 reviewer_name 是一个未知的列。

【问题讨论】:

  • 评论者和电影之间没有联系吗?您希望它们作为同一行的两列,任何评论者都会与任何电影一起使用?
  • 能否提供样例输入输出?您的问题要求将两个值放入一行,然后进行排序,仅对一行进行排序是没有意义的。我知道我在这里遗漏了一些东西。

标签: mysql sql sql-order-by union


【解决方案1】:

能否请您发送电影表 ddl 和评论者 ddl, 两个表中都有哪些列?

也许您正在寻找的东西可以通过以下方式解决:

select 
  m.title, 
  r.reviewer_name 
from 
  movie m, 
  reviewer r
where
 m.movieid = r.movieid 
order by m.title, r.reviewer_name;

更新问题后,您可以这样做:

select
  mo.title,
  rv.reviewer_name,
  ra.stars
from
  movie mo,
  reviewer rv,
  rating ra
where
  mo.movieid = ra.movieid
  and
  ra.reviewerid = rv.reviewerid
order by mo.title, rv.reviewer_name

我在ms access中也很快做到了:

SELECT 
  movie.title, 
  reviewer.reviewer_name, 
  rating.stars
FROM reviewer 
  INNER JOIN (movie INNER JOIN rating ON movie.movieid = rating.movieid) 
  ON reviewer.reviewerid = rating.reviwerid
ORDER BY movie.title, reviewer.reviewer_name

【讨论】:

    【解决方案2】:

    当您将两个(或更多)选择语句合并在一起时,第一个选择语句中的字段名称将用于输出。所以输出只会有一个名为“title”的字段。输出中没有“reviewer_name”字段。这就是您收到错误的原因。

    select title 
    from movie 
    
    union 
    
    select reviewer_name 
    from reviewer 
    
    order by title;
    

    【讨论】:

    • 但我需要考虑这两列来订购它。
    • 我刚刚重读了一遍。您想要在一行中的两个值?什么字段连接这两个表?你将需要一个 JOIN,而不是一个 UNION。
    • 如果有一个名为movie_id的字段将两个表连接在一起,那么MrSimpleMind的答案是正确的。
    • 再次检查问题。我已经用细节更新了它。 :) 是的,我希望它们排成一行
    【解决方案3】:

    试试看:

    SELECT * FROM (select title from movie union select reviewer_name from reviewer) as f order by title;
    

    但我认为这里缺少电影和评论者之间的联系......

    【讨论】:

      【解决方案4】:

      另一种帮助排序的可能性

      SELECT 0 as a, title
      FROM movie
      UNION
      SELECT 1 as a, reviewer_name as title
      FROM reviewer
      ORDER BY a, title
      

      【讨论】:

        猜你喜欢
        • 2012-01-30
        • 1970-01-01
        • 2013-09-13
        • 2012-04-12
        • 2014-01-09
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多