首页 > 解决方案 > 如何计算内部连接表中的行数

问题描述

我正在使用交叉引用表提取解决方案的所有信息。

SELECT
    s.*, u.forname, u.surname, u.email, u.tel, p.type
FROM _user_solution s
INNER JOIN _users u
    ON s.uid = u.uid
INNER JOIN _payment_plans p
    ON p.pid = s.payment_plan_type

效果很好,我的结果符合预期。但是,我有另一个表,其中包含该解决方案的任务,每个任务都有一个进度。我想指出该解决方案有多少任务,我尝试过:

SELECT
    s.*, u.forname, u.surname, u.email, u.tel, p.type,
    (SELECT COUNT(*) FROM t WHERE t.progress < 100 AS task)
FROM _user_solution s
INNER JOIN _users u
    ON s.uid = u.uid
INNER JOIN _payment_plans p
    ON p.pid = s.payment_plan_type
INNER JOIN _solution_tasks t
    ON s.sid = t.assigned_for_solution

但我收到此错误:

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 3 行的“AS 任务”附近使用正确的语法 FROM _user_solution s INNER JOIN _users u ON s.uid = u.uid'

任何关于我如何计算该解决方案不完整的任务的任何想法都将不胜感激。

标签: mysqlsqlcountinner-join

解决方案


您需要将AS task别名部分移到子查询之外;在右括号之外。

SELECT
    s.*, u.forname, u.surname, u.email, u.tel, p.type,
    (SELECT COUNT(*) FROM _solution_tasks WHERE progress < 100) AS task
FROM _user_solution s
INNER JOIN _users u
    ON s.uid = u.uid
INNER JOIN _payment_plans p
    ON p.pid = s.payment_plan_type
INNER JOIN _solution_tasks t
    ON s.sid = t.assigned_for_solution

推荐阅读