【问题标题】:Common table expressions with Inner Joins带有内部联接的公用表表达式
【发布时间】:2021-04-15 17:45:16
【问题描述】:

我正在尝试学习 MySQL 中 CTE 背后的直觉。我真正想了解的是如何创建嵌套查询。例如,我尝试运行此代码,但出现语法错误 -

WITH cte AS
(
  SELECT h.hacker_id, s.challenge_id, s.max_score FROM Hackers h
  INNER JOIN (
    SELECT hacker_id, challenge_id, max(score) as max_score FROM Submissions 
    GROUP BY hacker_id, challenge_id
  ) s ON h.hacker_id=s.hacker_id
)
SELECT * FROM cte

这段代码有什么问题?我正在使用 MySQL。

【问题讨论】:

  • 您的代码看起来不错。你遇到了什么错误?
  • ERROR 1064 (42000) at line 1:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在附近使用的正确语法...
  • 这是来自hackerrank的一个练习,我试图用它来学习sql。 hackerrank.com/challenges/contest-leaderboard/…
  • 还有什么SELECT VERSION();返回?必须至少为 8.0.1 才能支持 CTE 语法。
  • @Parma 。 . .您正在使用不支持 CTE 的旧版本 MySQL。使用更新的版本。

标签: mysql sql common-table-expression mysql-error-1064


【解决方案1】:

三种方式

  • 在 Submissions 上放置一个表别名,然后在 Submissions 查询的所有字段中使用它。
  • Sumissions 上的 Max() 和 group by 可能会导致错误
  • 将 Submissions 查询放入最后一个 CTE 之前,然后在最终查询中使用 sumissions 一个

使用 CteSubm 作为 ( 从提交中选择... ), CteJoin as ( select * from hckers h inner join ctesubm s on h.id = s.id ) 从 CTEjoin 中选择 *

【讨论】:

    猜你喜欢
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 2014-01-13
    • 2016-02-26
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多