当前位置: 首页 > 知识库问答 >
问题:

SQLSTATE[42000]:语法错误或访问冲突:1248每个派生表都必须有自己的别名

通沛
2023-03-14

我尝试了几个小时来修复这个请求,但没有成功,所以我希望你们能帮我找到问题所在:

SELECT ((
    SELECT DISTINCT *
    FROM (
        SELECT REPLACE(source_name, "+", "") AS name
        FROM events
        WHERE source_name!=""
        UNION
        SELECT REPLACE(target_name, "+", "") AS name
        FROM events
        WHERE target_name!=""
    )
) AS player_name,
(
    SELECT COUNT(*)
    FROM events
    WHERE source_name=player_name AND event_name="beforePlayerBan"
) as nbr_bans,
(
    SELECT COUNT(*)
    FROM events
    WHERE source_name=player_name AND event_name="beforePlayerKick"
) as nbr_kicks,
(
    SELECT COUNT(*)
    FROM events
    WHERE
        (source_name=player_name OR target_name=player_name)
        AND event_name="afterBattleStarted"
) as nbr_battles,
(
    SELECT COUNT(*)
    FROM events
    WHERE source_name=player_name AND result=0
) as nbr_wins,
(
    SELECT COUNT(*)
    FROM events
    WHERE target_name=player_name AND result=0
) as nbr_defeats,
(
    SELECT COUNT(*)
    FROM events
    WHERE (source_name=player_name OR target_name=player_name) AND result=1
) as nbr_ties,
(
    SELECT COUNT(*)
    FROM events
    WHERE (source_name=player_name OR target_name=player_name) AND result=2
) as nbr_forfeits

错误是SQLSTATE[42000]:语法错误或访问冲突:1248每个派生表都必须有自己的别名,这很奇怪,因为我给了每个表自己的别名

共有1个答案

百里成仁
2023-03-14

您的第一个子查询似乎缺少别名:

SELECT ((
       SELECT DISTINCT *
       FROM (
              SELECT REPLACE(source_name, "+", "") AS name
              FROM events
              WHERE source_name!=""
              UNION
              SELECT REPLACE(target_name, "+", "") AS name
              FROM events
              WHERE target_name!=""
    )  myMissingAlias -- alias needed here
) AS player_name, 

另外,除非您没有发布完整的查询,否则我认为您可能缺少最后一个

 类似资料:
  • 问题内容: 我无法为自己的生活弄清楚为什么这是错误的 问题答案: 它的含义与所说的完全一样-每个派生表都 必须 有一个别名。 更新。这应该为您工作:

  • 问题内容: 运行以下查询时出现该错误: 我知道我需要添加别名,但是我不确定在哪里 问题答案: 您需要为子查询添加别名,并且需要将条件应用于您合并的两个查询: 或返回数据,以便您可以在外部查询中应用条件:

  • 是否有代码缺失/不正确? 谢谢

  • 问题内容: 这个问题已经在这里有了答案 : 由于在MySQL中使用保留字作为表或列名而导致的语法错误 (1个答案) 3年前关闭。 我已经浏览了所有其他StackOverflow(和Google)中相同问题的帖子,但似乎都没有解决我的问题。 我正在使用PDO和PHP。 我的代码: 而第一个print_r给 这是预期的(没有一个为空) 但它输出错误 SQLSTATE [42000]:语法错误或访问冲突

  • 问题内容: 我在MySQL上运行此查询 它给出了这个错误: 每个派生表必须具有自己的别名。 是什么导致此错误? 问题答案: 每个派生表(AKA子查询)确实必须有一个别名。也就是说,括号中的每个查询都必须被赋予一个别名(),该别名可以在外部查询的其余部分中用于引用它。 当然,对于您而言,整个查询可以替换为:

  • 问题内容: 在MySQL中使用此查询时出现错误。 查询逻辑是正确的,我已经在Oracle中进行了尝试,并且运行正常,但是在MySQL中运行时出现错误。 我查看了关于StackOverflow的先前问题,但没有找到什么对我有帮助。 这是查询: 这是错误: 问题答案: 您需要为子查询提供别名,如下所示: 从文档中, 子查询在SELECT语句的FROM子句中是合法的。实际语法为: SELECT … FR

  • 问题内容: 我想在同一查询中使用WhereIn和Groupby来获取结果。 我已经试过了: 但是我得到了这个错误信息: SQLSTATE [42000]:语法错误或访问冲突:1055’sbrtpt.loading.id’不在GROUP BY中(SQL:从中选择从(14,15,16)组中的id按Vehicle_no进行加载) 问题答案: 简短答案 在-> 数组中 设置为全部禁用。 .... 要么 您

  • 在cmd中提交“php artisan migrate:fresh”后出现错误。 SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节(SQL:alter tableaddunique()