0

假设您有两个带有列的表:

  • 表1:ID,数据
  • table2: id, t1_ref (这是 table1 的 FK), some_other_column

现在我可以写类似的东西(我知道这可以写得不同,更有效等,而不是寻找那些):

SELECT t1.data,
   (SELECT count(*)
    FROM table2 t2
    WHERE t2.t1_ref = t1.id) AS nested_result
FROM table1 t1;

我的问题是,我在哪里可以在主查询的其余部分使用“nested_result” ?我可以在 FROM 中使用它(例如在另一个嵌套选择中)吗?还是在 WHERE?还是在 GROUP BY 中?还是按订单?其他地方?

例如 MySQL 似乎不喜欢:

SELECT t1.data,
   (SELECT count(*)
    FROM table2 t2
    WHERE t2.t1_ref = t1.id) AS nested_result
FROM table1 t1
WHERE nested_result > 100;

但是这里的一般规则是什么?

4

1 回答 1

2

nested_result是列别名。

您可以在group byhavingorder by子句中使用它。

您可以将整个语句放在子查询中,并在外部查询中使用它。

这是文档中的参考:

以下列表提供了有关其他 SELECT 子句的附加信息:

可以使用 AS alias_name 为 select_expr 指定别名。别名用作表达式的列名,可用于 GROUP BY、ORDER BY 或 HAVING 子句。例如:

SELECT CONCAT(last_name,', ',first_name) AS full_name
FROM mytable
ORDER BY full_name;

编辑:

对于您的特定示例,您可以将其更改wherehaving

SELECT t1.data,
       (SELECT count(*)
        FROM table2 t2
        WHERE t2.t1_ref = t1.id
       ) AS nested_result
FROM table1 t1
HAVING nested_result > 100;

这是一个 MySQL 扩展,在其他数据库中不起作用。尽管我不喜欢它,但我不得不承认它很方便。

于 2013-09-12T22:20:20.480 回答