1

我试图获得一些统计数据;来自 3 个不同表格的总链接、用户和视图。我在尝试什么:

SELECT SUM(p.views), COUNT(c.id), COUNT(u.id)
FROM studenkel_userprefs as p, studenkel_content as c, studenkel_users as u

如果我在三个不同的查询中单独执行它们,它们可以正常工作,但结果会比我想要的高几千倍。我猜他们以某种方式相乘,提示?

谢谢

编辑:谢谢大家,非常感谢您的帮助,解决了。

4

3 回答 3

2

您在 from 中所做的称为无条件的隐式内部连接。

这意味着你的最终视图有p.rows * c.rows * u.rows行,这就是为什么你有奇怪的结果。

如果您有 3 个问题,请分别提出,而不是一次全部提出。

或者,如果你真的只想要一个请求,你可以使用一些丑陋的东西:

SELECT
  SELECT SUM(views) FROM studenkel_userprefs as "sum_userprefs",
  SELECT COUNT(id) FROM studenkel_content as "cnt_content",
  SELECT COUNT(u.id) FROM studenkel_users as "cnt_users"
FROM DUAL;
于 2013-10-22T15:22:27.940 回答
0

你可以“作弊”吗?

SELECT
    (
        SELECT 
            SUM(p.views)
        FROM 
            studenkel_userprefs as p
    ) as `views`,
    (
        SELECT
            COUNT(c.id)
        FROM
            studenkel_content as c
    ) as `content_count`,
    (
        SELECT
            COUNT(u.id)
        FROM
            studenkel_users as u
    ) as `user_count`
于 2013-10-22T15:19:23.563 回答
0

这是因为您正在对表进行笛卡尔连接,它将一个表中的行数乘以另一个表中的行数。如果不指定任何一种JOIN ... ON格式的连接或在WHERE子句中指定连接条件,这是您将获得的唯一结果。

于 2013-10-22T15:19:36.167 回答