子查询返回多列

时间:2009-08-29 14:36:22

标签: mysql subquery having

我正在编写一个返回COUNT的select子查询。但是,我需要在子查询中使用HAVING子句,因此需要在子查询SELECT中指定该列。结果是我有2列:COUNT和column_for_having_clause。

有什么方法可以告诉SQL只采取第一列。我收到一个错误说 “操作数应包含1列”。我认为这一定是一个常见的问题,是否有人知道解决方法?

另外,有没有办法在不指定SELECT查询中的列的情况下执行HAVING子句?

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以做到

SELECT blah FROM foo WHERE bar = (SELECT cnt FROM (SELECT cnt, column_for_having_clause FROM table .... HAVING ... LIMIT 1))

但是很难看。

答案 1 :(得分:1)

当然,您可以在HAVING子句中指定几乎所有表达式。它不必是选择列表中的列。

SELECT ...
FROM foo
WHERE x = (SELECT COUNT(*) FROM bar 
           GROUP BY y HAVING y = MAX(y));

但是,如果您将计数与外部查询中的某些内容进行比较,则还可以比较元组。

SELECT ...
FROM foo
WHERE (x, 1) = (SELECT COUNT(*), y = MAX(y) AS is_max FROM bar
                GROUP BY y HAVING is_max = 1);