2011-08-25 116 views
0

我有2个表中MySQL数据库同一查询的多个表的MySQL

T1 : registration 
T2 : multiple_email 

,我有在这两个表中的字段EMAIL_ID。我想运行查询来查看电子邮件是否有效。所以,我可以运行2个查询为

select count(*) from registration where emailid = $emailid 
select count(*) from multiple_email where emailid = $emailid 

如果其中一个计数大于0,我认为它是一个有效的电子邮件。

在单个查询中是否有一种优雅的方式呢?

回答

2
select count(*) + 
(select count(*) from multiple_email where emailid = $emailid) 
from registration where emailid = $emailid 
0

我认为这是最好使用2个查询有了一些变化:

select emailid from registration where emailid = $emailid ; 
select emailid from multiple_email where emailid = $emailid 

这将是快于COUNT(*),因为你只从索引读取。如果EMAILID不是主键,您可以添加限制1.

+0

'COUNT(*)'在这种情况下,将扫描只是'emailid'指数(当然,如果有一个索引) – a1ex07

+0

@ alex17,我认为你应该阅读有关工作在innodb中计数(*)。有时非常缓慢。无论如何,得到emailid或者我比计数快。 –

+0

@ Andrej L:你在说inno数据库中的COUNT(*)'没有'WHERE'条件(在问题中有'WHERE')。 COUNT(*)'/或'COUNT(constant_value,例如1)'+'WHERE indexed_field = whatever'扫描索引,而不是db。 'COUNT(indexed_field)+'WHERE indexed_field = whatever'扫描索引并消除NULL值。 'SELECT indexed_field' +'WHERE indexed_field = whatever'不会比'COUNT(*)'更快。 – a1ex07