2011-08-25 178 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