我试图得到一些统计数据;来自3个不同表格的总链接,用户和视图。 我在尝试什么:
SELECT SUM(p.views), COUNT(c.id), COUNT(u.id)
FROM studenkel_userprefs as p, studenkel_content as c, studenkel_users as u
如果我在三个不同的查询中单独执行它们,它们可以正常工作,但是结果会比我想要的结果高出几千倍。我猜他们会以某种方式相互增加,提示?
由于
编辑:谢谢大家,真的很感谢你的帮助,整理出来。
答案 0 :(得分:2)
你在自己身上所做的事情被称为没有标准的隐式内部联接。
这意味着您的最终视图有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;
答案 1 :(得分: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`
答案 2 :(得分:0)
这是因为您正在对表进行笛卡尔连接,这会将一个表中的行数乘以每个其他表中的行数。如果不以JOIN ... ON
格式指定联接或通过在WHERE
子句中指定联接条件,则这是您将获得的唯一结果。