【发布时间】:2013-12-17 20:00:19
【问题描述】:
我正在尝试计算表中的记录数。 该表称为 affiliations,只有 4 列(其中 2 列是外键)
我想统计附属列为0且business_id与特定account_email相关的记录数。
我知道如何使用 IN 关键字执行此查询,但我想知道是否有更好或更有效的方法来执行此操作。
这是查询的 IN 版本:
SELECT COUNT(1) FROM affiliations
WHERE business_id IN (
SELECT business_id
FROM affiliations
WHERE account_email = 'address@domain.ext'
) AND affiliated = 0
我知道我可以用 EXISTS 替换它:
SELECT COUNT(1) FROM affiliations
WHERE EXISTS (
SELECT 1 FROM affiliations
WHERE account_email = 'address@domain.ext'
) AND affiliated = 0
带有 EXISTS 的语句会起作用吗?如前所述,有没有更好的方法来做到这一点?
提前致谢!
【问题讨论】:
-
一些附加信息:business_id 在此表中不是唯一的。数据库中账户和企业之间存在多对多关系,该表包含相关的account_emails和business_ids。我正在选择一个 account_email,并想获取该帐户相关的所有 business_id,然后计算也与这些业务中的每一个相关的帐户数
-
请发布此查询的 EXPLAIN ANALYZE 输出
-
如何计算 account_email = 'address@domain.ext' 和附属 = 0 的 business_id
-
这只会给我与“address@domain.ext”相关联的企业数量为 0。我想获得与“相同企业”相关的帐户数量address@domain.ext' 附属为 0
-
@Ben Guest:那么,有没有机会根据要求看到
EXPLAIN?