别名的mysql范围

xoefb8l8  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(343)

我有以下代码:

SELECT (
    SELECT COUNT(*)
    FROM (
        SELECT DISTINCT a.DtaId
        FROM Tappt a
        WHERE g.Id = a.TapptGroupsId
    ) AS t0
) AS Id
FROM Tappt t
LEFT JOIN TapptGroups g ON t.TapptGroupsId = g.Id;

在mysql中,它抛出错误: Unknown column 'g.Id' in 'where clause' 替代的t-sql代码在具有相同模式的mssqlserver中运行良好。
有人能解释一下是什么问题吗?

brjng4g3

brjng4g31#

我觉得你不需要 LEFT JOIN 在外部查询中。也许你想要:

SELECT (SELECT COUNT(DISTINCT a.DtaId)
        FROM Tappt a
        WHERE g.Id = a.TapptGroupsId
       ) AS id
FROM TapptGroups ;

或:

SELECT COUNT(DISTINCT t.dtaID)
FROM Tappt t LEFT JOIN
     TapptGroups g
     ON t.TapptGroupsId = g.Id
GROUP BY g.id;

mysql只在一个层次上识别相关子句——oracle是另一个具有此限制的数据库。您还可以通过在 FROM 条款。

juud5qan

juud5qan2#

您可以将其重写为(一个嵌套级别):

SELECT (
    SELECT COUNT(DISTINCT a.DtaId)
    FROM Tappt a
    WHERE g.Id = a.TapptGroupsId
) AS Id
FROM Tappt t
LEFT JOIN TapptGroups g ON t.TapptGroupsId = g.Id;

相关问题