gpt4 book ai didi

MySQL 在 SELECT 中引用嵌套查询结果?

转载 作者:行者123 更新时间:2023-11-29 08:23:03 26 4
gpt4 key购买 nike

假设您有两个包含列的表:

  • 表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 中使用它(例如在另一个嵌套选择中)吗?或者在哪里?或者在 GROUP BY 中?或者在 ORDER 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;

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

最佳答案

nested_result 是列别名。

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

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

这是documentation中的引用:

The following list provides additional information about other SELECT clauses:

A select_expr can be given an alias using AS alias_name. The alias is used as the expression's column name and can be used in GROUP BY, ORDER BY, or HAVING clauses. For example:

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

编辑:

对于您的特定示例,您可以将 where 更改为 having:

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 扩展,不适用于其他数据库。尽管我不喜欢它,但我不得不承认它很方便。

关于MySQL 在 SELECT 中引用嵌套查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18775198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com