计算子查询中的行数
Posted
技术标签:
【中文标题】计算子查询中的行数【英文标题】:Counting rows from a subquery 【发布时间】:2011-07-18 06:40:00 【问题描述】:如何将 SELECT 查询中的行数计为值? 比如
SELECT FUCNTIONIMLOOKINGFOR(SELECT * FROM anothertable) AS count FROM table;
所以该计数是子查询SELECT * FROM anothertable
返回的行数的整数。
编辑
SELECT p.PostPID, p.PostUID, p.PostText, p.PostTime, u.UserUID, u.UserName, u.UserImage, u.UserRep,
(
SELECT COUNT(f.FlagTime)
FROM Flags as f
JOIN Posts as p
ON p.PostPID = f.FlagPID
) as PostFlags
FROM Posts AS p
JOIN Users AS u
ON p.PostUID = u.UserUID
ORDER BY PostTime DESC
LIMIT 0, 30
【问题讨论】:
@Charlie - 不确定您是否收到错误,但您是否在 (SELECT ...) 之前缺少逗号作为 PostFlags? @Charlie - 我不确定 v.FlagTime 中的“v”指的是什么,你没有任何用 v 标记的连接,那么 f.FlagTime 呢? @Charlie - 所以一切都修复了吗? 【参考方案1】:SELECT ( SELECT COUNT(id) FROM aTable ) as count FROM table
我假设您的示例是实际查询的截断版本,因此也许您应该发布您所追求的内容以获得可能更优化的查询。
编辑
直接从我的大脑中工作,这样的事情应该更优化。
SELECT p.PostPID, p.PostUID, p.PostText, p.PostTime, u.UserUID, u.UserName, u.UserImage, u.UserRep, COUNT(v.FlagTime) as postFlags
FROM Flags as f
JOIN Posts as p ON p.PostPID = f.FlagPID
JOIN Users AS u ON p.PostUID = u.UserUID
LIMIT 0, 30
GROUP BY p.PostPID
ORDER BY PostTime DESC
【讨论】:
如果不是所有帖子都有标记,这将排除那些没有标记的帖子。如果是这种情况,请执行from posts left join Flags...
【参考方案2】:
你可以说
SELECT COUNT(*) FROM anothertable
这将返回一个数值,您可以在另一个查询中使用它,例如在另一个查询的选择列表中,或作为另一个查询中的条件。
SELECT someVariable FROM table
WHERE (SELECT COUNT(*) FROM anotherTable) > 5
或
SELECT someVariable, (SELECT COUNT(*) FROM anotherTable) as count FROM table
【讨论】:
我更新了我的帖子。但是子查询似乎在没有连接的情况下执行。 谢谢!第二个例子很有帮助以上是关于计算子查询中的行数的主要内容,如果未能解决你的问题,请参考以下文章