MYSQL:如何从多个数据库中选择DISTINCT

时间:2014-02-10 12:09:15

标签: mysql select distinct multiple-databases

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

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

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?

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

2 个答案:

答案 0 :(得分:3)

这是您的查询:

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';

此外,从关系数据库的角度来看,为每个影院存储电影是个坏主意。您应该将所有电影存储在一张桌子中,以及他们正在播放的电影院。

答案 1 :(得分:0)

试试这个

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';