You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从连接子查询查询的MariaDB SQL语法问题排查

排查SQL语法错误及修正

问题根源

查询示例1的语法错误出在子查询别名的位置:你把AS subquery放在了WHERE子句后面,这不符合MySQL的语法规则。子查询的别名必须紧跟在定义子查询的闭合括号)之后,而不是内部WHERE条件的末尾。

修正后的查询示例1

SELECT * FROM
    (SELECT events.id, events.type, events.timestamp, work_list.task
    FROM 
        events
        INNER JOIN records ON events.record_id = records.id
        INNER JOIN work_list ON records.work_list_id = work_list.id
    WHERE work_list.customer_number = '1234'
    ) AS subquery;

另外,原查询里连接表时套的额外括号(events INNER JOIN ...)是多余的,可以直接去掉,不影响逻辑且更简洁。

结合后续统计逻辑的整合示例

按照你后续的统计需求(查询示例3),可以把过滤后的子查询直接替换到the filered subquery here的位置,整合后的完整查询如下:

SELECT *, ((SUM(rate * diff) OVER (ORDER BY startTime
     ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)) /
     (SUM(diff) OVER(ORDER BY startTime
     ROWS BETWEEN 4 PRECEDING AND CURRENT ROW))) as rate_WMA
FROM (
    SELECT id, startTime, counts, diff, (counts / diff)*3600 as rate
    FROM (
        SELECT events.id, TIMESTAMPDIFF(SECOND, MIN(events.timestamp), MAX(events.timestamp)) AS diff, SUM(events.change) as counts, MIN(events.timestamp) as startTime
        FROM events
        INNER JOIN records ON events.record_id = records.id
        INNER JOIN work_list ON records.work_list_id = work_list.id
        WHERE work_list.customer_number = '1234'
        GROUP BY events.id 
    ) AS subquery
    WHERE diff > 0 
) AS totaltotal;

内容的提问来源于stack exchange,提问作者Jussi Tamminen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:05:36