我需要计算两个表中的行,我想做一个SQL查询来完成这项工作。经过一些研究后,我找到了一个解决方案,我对此进行了修改:
SELECT COUNT(activate_account.id), COUNT(members.id) FROM members, activate_account
WHERE members.email = :email or activate_account.email = :email
现在我的问题是:这是一个很好的方法来组合两个SELECT查询,这是一个很好的解决方案,好像我会使用JOIN或UNION(意味着应该有任何性能改进相比,如果我有两个单独的SELECT查询)?
答案 0 :(得分:1)
JOIN和UNION是不同的。
在您的查询中,您使用了CROSS JOIN操作,因为当您在两个表之间使用逗号时,您应用CROSS JOIN。如果您在WHERE子句中放置两个表之间的链接,在您的情况下成员和activate_account没有链接,它就变为INNER JOIN。
当您想要从两个不同的集合中获取值时,可以使用UNION。也就是说,如果你想要一份员工清单和一份水手清单,假设,员工和水手都在两个不同的表格中。
答案 1 :(得分:1)
可能是迟到的回复,但下面会有效
SELECT tblactivate_account.activate_account, tblmembers.members
FROM
( SELECT COUNT(activate_account.id) activate_account
WHERE activate_account.email = email ) tblactivate_account,
( SELECT COUNT(members.id) members FROM members
WHERE members.email = email ) tblmembers
对nrathaus回答的修改
答案 2 :(得分:0)
您需要创建两个单独的查询并加入他们的结果而不是加入他们的表。
一些伪未经测试的SQL但应该可以工作:
SELECT tblactivate_account.activate_account, tblmembers.members
FROM
( SELECT COUNT(activate_account.id) activate_account
WHERE activate_account.email = :email ) AS tblactivate_account,
( SELECT COUNT(members.id) FROM members
WHERE members.email = :email ) AS tblmembers
答案 3 :(得分:0)
意味着与我相比,是否应该有任何改进 会有两个单独的SELECT查询
如果要组合两个表,没有充分的理由可以避免使用JOINS和UNION。就性能问题而言,我不认为使用JOINS会引发任何此类问题。还要提到UNION将查询中的行放在彼此之后,而JOIN生成笛卡尔积和子集,这是一个完全不同的操作。
顺便说一下,您可能还想阅读:Bad habits to kick : using old-style JOINs因为我怀疑您使用较旧的约定来连接表格。