围绕MySQL

时间:2016-08-23 06:56:17

标签: mysql sql join where

我使用MySQL数据库版本5.6.17
我有以下表格

  1. 用户
    • ID
    • 用户名
  2. 系列
    • imdbID
  3. 插曲
    • imdbID
    • 季节
    • 插曲
    • imdbVotes
    • seriesID
  4. marktype
    • ID
  5. 测试又名(serieswatchlist)
    • ID
    • 用户ID
    • EPID
    • markid

  6. 请注意:我没有删除每个表中的大多数列以减少问题长度
    我设法使用以下SQL代码提取以下数据(所有用户数据,所有剧集数据,所有系列数据)

    SELECT e.*, u.username, s.*
    FROM test w
    INNER JOIN users u
    ON u.ID = w.userid
    INNER JOIN episode e
    ON w.epid = e.imdbID
    INNER JOIN series s
    ON e.seriesID = s.imdbID
    WHERE e.seriesID IN (SELECT (imdbID) FROM series) 
    AND w.userid = 1
    

    但我想对该SQL语句的结果进行另一个操作 我想从每个系列中获取它使用SQL语句从该系列中获得的那个季节的最大季节数和最大剧集数。
    到目前为止,每次我尝试在前一个代码之前编写任何代码时,它总是给我一个错误,除了语法错误之外没有解释。
    更新1: 尝试了我的代码周围的GROUP BY,但它导致了错误 "每个派生表必须有自己的别名"
    这是修改后的代码

    SELECT MAX(e.season) FROM
    (SELECT e.seriesID, u.username, e.imdbID AS "episodeID"
    FROM test w
    INNER JOIN users u
    ON u.ID = w.userid
    INNER JOIN episode e
    ON w.epid = e.imdbID
    INNER JOIN series s
    ON e.seriesID = s.imdbID
    WHERE e.seriesID IN (SELECT (imdbID) FROM series) 
    AND w.userid = 1)
    GROUP BY seriesID
    

    更新2: 更改了代码以将错误修复为以下

    SELECT MAX(x.season), max(x.episode) FROM
    (SELECT e.seriesID, u.username, e.imdbID AS "episodeID", e.season, e.episode
    FROM test w
    INNER JOIN users u
    ON u.ID = w.userid
    INNER JOIN episode e
    ON w.epid = e.imdbID
    INNER JOIN series s
    ON e.seriesID = s.imdbID
    WHERE e.seriesID IN (SELECT (imdbID) FROM series) 
    AND w.userid = 1) as x
    GROUP BY x.seriesID
    

    它没有任何问题

1 个答案:

答案 0 :(得分:1)

将现有查询放在FROM部分(作为子查询)并应用必要的GROUP BY和汇总函数

应该是

select ... 
from (the subuery) <alias_name> 
group by <alias_name>.some_field

e.g。别名可以是sub