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

时间:2013-09-12 22:17:11

标签: mysql sql

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

  • table1:id,data
  • table2:id,t1_ref(表格为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?或者在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;

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

1 个答案:

答案 0 :(得分:2)

nested_result是列别名。

您可以在group byhavingorder by条款中使用它。

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

以下是documentation中的参考:

  

以下列表提供了有关其他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;

编辑:

对于您的特定示例,您可以将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扩展,在其他数据库中不起作用。尽管我不喜欢它,但我不得不承认它很方便。