Mysql如何使用几个条件从几个表中计算数据

时间:2017-05-19 10:48:48

标签: mysql sql select count union

我有表mail

+---------+-----------+--------------+
|    m_id |    dns_id | mail_name    | 
+---------+-----------+--------------+
|        1|         5 | myac1        | 
|        2|         5 | myac2        | 
+---------+-----------+--------------+-

dns_id它是来自表dns的域名的id m_id它是电子邮件ID为id的关键字段 mail_name电子邮件的名称

dns

+-----------+-----------+------------+
|    dns_id |    acc_id |         dns|
+-----------+-----------+------------+
|         5 |         1 |    test.com| 
|         6 |         1 |   test2.com|            
+-----------+-----------+------------+

acc_id我的帐户ID 我的域名dns名称

如何查看,我有一个帐户的两个不同的域。 表dns_id中的字段dns与表dns_id中的mail相关联。我的邮件帐户为dns_id,ID为5,名称为test.com。但我没有test2.com dns_id的邮件帐户6。 我需要为dns_id计算acc_id的计数 简单:

select count(dns_id) from dns where acc_id = 1; 

结果:

+------------------+
|   count(dns_id)  |
+------------------+
|                2 |
+------------------+
1 row in set (0.00 sec)

但是,如果我只想对域进行计数,那么在表mail中有邮件帐户。这该怎么做 ?我不想计算域名,我没有邮件帐户。在这种情况下,我应该:

+------------------+
|   count(dns_id)  |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

由于我的dns_id号码为6且域名为test2.com的{​​{1}}没有表mail中的邮件帐户。

2 个答案:

答案 0 :(得分:1)

尝试

SELECT COUNT(dns_id)
FROM dns
WHERE acc_id IN (
    SELECT m_id FROM mail
)

答案 1 :(得分:0)

我确信如果我理解正确, 但你可以尝试下面的查询。     SELECT COUNT(*)     来自dbo.DNS     WHERE(acc_id = 1)     AND dns_id IN(SELECT d_id FROM dbo.Mail)