MySQL的别名范围

时间:2018-04-16 17:24:08

标签: mysql sql

我有以下代码:

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代码在具有相同架构的MS SQL Server中正常工作。

有人能解释一下是什么问题吗?

2 个答案:

答案 0 :(得分:0)

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

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;

答案 1 :(得分:0)

我认为您不需要外部查询中的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子句中进行聚合来解决此问题。