在MySQL使用生成列where子句
问题描述:
如果我有一个查询,如:在MySQL使用生成列where子句
select column1, (
select count(*) from table2
) as some_count
from table1
where column1 = 'foo'
我可以在where子句中使用column1
,但如果我尝试添加
and some_count > 0
然后我收到一个错误,some_count
不存在。我如何在where子句中使用它?
答
使用HAVING
select column1, (
select count(*) from table2
) as some_count
from table1
HAVING some_count > 0
答
原样,唯一的办法是使用派生表:
SELECT x.*
FROM (select column1,
(select count(*) from table2) as some_count
from table1
where column1 = 'foo') x
WHERE x.some_count > 0
你意识到,如果没有相关性,some_count
是否会返回一个返回的每一行相同的值?
+0
是的,这只是一个简单的例子。但我从来没有想过(或知道如何)使用派生表。我将试一试 – 2010-08-11 22:50:51
在GROUP BY&HAVING中引用MySQL和SQL Server支持列别名,但Oracle不支持。但是,SQL Server会引发一个错误,因为这两个列都不包含在聚合中或在GROUP BY子句中提到。只有在MySQL和SQLite上这个查询才是有效的,+1 – 2010-08-11 22:56:46
这是完美的,这是为WordPress的网站,所以它运行MySQL,但我很高兴看到有关oracle和sql server的陷阱 – 2010-08-11 23:01:02