【问题标题】:TABLE DOESN'T EXIST - CANNOT REFERENCE SUBQUERY TABLE FROM OTHER SUBQUERY表不存在 - 不能从其他子查询引用子查询表
【发布时间】:2022-09-15 19:44:43
【问题描述】:

我正在使用mysql。我有一个包含 medico、paziente 和 visita 表的数据库(分别是医生、患者和就诊)。我想获取一天内访问次数最多的日期。因此,我创建了一个子查询,它返回包含当天访问次数的日期,然后将它们过滤掉以仅获取一天内访问次数最多的日期。这应该可以,但是 WHERE 之后的子查询告诉我它没有找到名为 R 的表,即之前子查询的表结果。这是整个查询:

SELECT R.Data, 
       R.Conto 
FROM  ( SELECT Data, 
               COUNT(*) AS Conto 
        FROM visita 
        GROUP BY Data
       ) AS R 
WHERE R.Conto = ( SELECT MAX(R.Conto) FROM R );

谁能解释为什么我不能从其他子查询中引用表以及我应该如何以正确的方式解决这个问题?

【问题讨论】:

  • 表别名代表它旁边定义的表中的典型行,而不是表。所以 R 代表子查询结果中的典型行。 R 不是表,所以它肯定不是子查询结果。
  • 当确定并明确表达时,这将是一个常见问题解答。 (显然。)在考虑发布之前请:通过minimal reproducible example 确定代码问题。阅读手册/参考和谷歌任何错误消息和许多清晰、简洁和精确的措辞,包含和不包含您的特定名称/字符串/数字、“site:stackoverflow.com”和标签;阅读许多答案。在帖子中反映研究。 SO/SE 搜索很差&字面&不寻常,请阅读帮助。谷歌重新搜索/搜索,包括Meta Stack OverflowMeta Stack Exchange 的问答。 research effortHow to AskHelp center
  • 请询问 1 个经过研究的特定非重复问题。请使用强制性minimal reproducible example 询问 1 个错误的查询/函数以及为什么您认为它应该在第一个子表达式中返回其他内容,它没有给出您所期望的,通过参考权威文档证明是合理的,或者询问您的整体目标是给你可以做的工作部分,最好是minimal reproducible example。但是请先询问前者,因为对前者的误解会妨碍对后者的理解。糟糕的代码并不能告诉我们你希望它做什么。 How to Ask Help center

标签: mysql subquery scalar-subquery


【解决方案1】:

如果您使用 cte 有 8 或更高版本,则更容易掌握

DROP table if exists t;

create table t
(data date);
insert into t values
('2022-09-01'),('2022-09-01'),('2022-09-02'),('2022-09-03'),('2022-09-03');

with cte as
(select data,count(*) cnt from t group by data)
,
cte1 as
(select max(cnt) maxcnt from cte)
select data,cnt 
from cte 
cross join cte1 
where  cnt = maxcnt;

+------------+-----+
| data       | cnt |
+------------+-----+
| 2022-09-01 |   2 |
| 2022-09-03 |   2 |
+------------+-----+
2 rows in set (0.002 sec)

【讨论】:

  • 谢谢,我还不知道 CTE,但它们是我需要使用的东西。我只需将 R 创建为 CTE,然后在子查询中引用它。 ``` WITH R AS (SELECT Data, COUNT(*) AS Conto FROM visita GROUP BY Data) SELECT R.Data, R.Conto FROM R WHERE R.Conto = (SELECT MAX(R.Conto) FROM R); ```
猜你喜欢
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多