【问题标题】:MYSQL : How to SELECT DISTINCT from multiple databasesMYSQL:如何从多个数据库中选择 DISTINCT
【发布时间】:2014-02-10 12:09:14
【问题描述】:

当我想显示来自多个数据库的数据时遇到问题。它给出了重复的值。

所以我在同一台服务器上有三个数据库。它们具有相同的表结构。 所以这是我的查询:

Query = 'SELECT id_movie, movie_tittle
          FROM (SELECT id_movie, movie_tittle, status from margoplatinum.movie
      UNION
      SELECT id_movie, movie_tittle, status from detos21.movie
      UNION
      SELECT id_movie, movie_tittle, status from plaza21.movie) AS a
      WHERE a.status = "Now Playing"'

它可以工作,但会给出这样的重复值:

id_movies      |        movie_tittle
------------------------------------------
      2        |          THOR 2
      1        |         Gravity
      3        |          THOR 2
      1        |  The Legend of Hercules
      4        |         Gravity

所以我把DISTINCT 子句这样写:

Query = 'SELECT id_movie, DISTINCT (movie_tittle)
          FROM (SELECT id_movie, movie_tittle, status from margoplatinum.movie
          UNION
      SELECT id_movie, movie_tittle, status from detos21.movie
      UNION
      SELECT id_movie, movie_tittle, status from plaza21.movie) AS a
      WHERE a.status = "Now Playing"'

但上面的查询不起作用。它有一条错误消息:

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'DISTINCT (movie_tittle) 
FROM (SELECT id_movie, movie_tittle, status from mar' at line 1

那么如何从多个数据库中编写SELECT DISTINCT?

您的任何帮助都会非常有帮助:) 谢谢

【问题讨论】:

    标签: mysql select distinct multiple-databases


    【解决方案1】:

    这是您的查询:

    SELECT id_movie, movie_tittle
    FROM (SELECT id_movie, movie_tittle, status from margoplatinum.movie
          UNION
          SELECT id_movie, movie_tittle, status from detos21.movie
          UNION
          SELECT id_movie, movie_tittle, status from plaza21.movie
         ) a
    WHERE a.status = 'Now Playing'
    

    返回重复项。您在选择中有id_movie,这在每个表中(显然)是不同的。

    删除id_movie,它将返回没有重复的电影名称:

    SELECT movie_title
    FROM (SELECT movie_title, status from margoplatinum.movie
          UNION
          SELECT movie_title, status from detos21.movie
          UNION
          SELECT movie_title, status from plaza21.movie
         ) a
    WHERE a.status = 'Now Playing';
    

    此外,从关系数据库的角度来看,存储每个影院的电影是一个坏主意。您应该将所有电影连同它们正在播放的电影院一起存储在一个表中。

    【讨论】:

    • 啊我明白了..我完全忘记了 id_movie..谢谢你,先生! :)
    【解决方案2】:

    试试这个

    SELECT DISTINCT movie_tittle, id_movie
    FROM
        (SELECT 
            id_movie, movie_tittle, status
        from
            margoplatinum.movie UNION SELECT 
            id_movie, movie_tittle, status
        from
            detos21.movie UNION SELECT 
            id_movie, movie_tittle, status
        from
            plaza21.movie) AS a
    WHERE
        a.status = 'Now Playing';
    

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多