别名的MySQL范围
我有以下代码:别名的MySQL范围,mysql,sql,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中,它抛出错误:where子句中的未知列“
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中,它抛出错误:where子句中的未知列“g.Id”
替代的T-SQL代码在具有相同模式的MS SQL Server中运行良好
有人能解释一下问题是什么吗?您可以将其重写为(一个嵌套级别):
我认为您不需要在外部查询中使用
左连接。也许你想要:
SELECT (SELECT COUNT(DISTINCT a.DtaId)
FROM Tappt a
WHERE g.Id = a.TapptGroupsId
) AS id
FROM TapptGroups ;
或:
MySQL只在一个层次上识别关联子句——Oracle是另一个具有此限制的数据库。您还可以通过在FROM
子句中进行聚合来解决此问题。您好,问题是:其中g.Id=a.taptgroupsid。你还没有定义g是什么。在你的情况下,点击a;仅定义了一个。我想提到的另一个想法是,表达式总是由内而外进行计算。这是一个数学原理。MySQL中的别名只能上升或下降一级。。您有两个级别(两个嵌套选择)。执行此操作,您将看到它没有列Id:“描述TapptGroup”@Xmoůcolumn@NesanMano“g”是在带有“JOIN”的行中定义的。问题是SQL是由ORM生成的。@VladislavTryhub命名查询,或者您可以尝试将方言设置为MySQL
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;