【问题标题】:Getting confused by MySQL subqueries对 MySQL 子查询感到困惑
【发布时间】:2011-08-14 19:10:47
【问题描述】:

我正在尝试学习如何进行子查询,我真的很困惑这个简单的例子有什么问题。

我的第一次尝试是

SELECT COUNT(SELECT * FROM my_table);

但这不起作用(我猜是因为我需要一个临时表?)所以我尝试了这个:

SELECT COUNT(items)
FROM (SELECT * FROM my_table) AS items;

为什么我会得到以下信息:

1054:“字段列表”中的未知列“项目”

【问题讨论】:

    标签: mysql sql subquery mysql-error-1054


    【解决方案1】:

    您收到错误是因为在此示例中 items 是一个表(因为它是一个别名),而不是一个列。最简单的解决方案是使用:

    SELECT COUNT(*)
      FROM (SELECT * FROM my_table) AS items
    

    聚合函数(IE:COUNT、MIN、MAX、AVG 等)仅适用于列引用,但有些接受 [table].* 作为参数。

    【讨论】:

    • 顺便说一句,你确定这有效吗?我正在尝试类似的东西,它在*附近给了我一个语法错误...
    • @Mehrdad:发布您尝试使用的查询。
    • SELECT COUNT(tab.*) FROM (SELECT * FROM foo) AS tab;
    • 另外,您确定别名实际上是一个表吗?如果我尝试自加入 (SELECT COUNT(tab.id) FROM (SELECT * FROM foo) AS tab JOIN tab tab2 ON tab.id = tab2.id;),我会被告知 tab 不存在(即使它是一个临时表)...
    • @Mehrdad:示例中只有一张表——无需区分。 COUNT(items.*) 不起作用,但是你测试过COUNT(items.bar) 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多