1

emails_accounts次のような構造のテーブルがあります。

╔════╦═════════════════════╦══════════════╗
║ id ║        email        ║ description  ║
╠════╬═════════════════════╬══════════════╣
║  1 ║ test@gmail.com      ║ Lorem        ║
║  2 ║ example@example.com ║ Ipsum        ║
║  3 ║ test@example.com    ║ Dolor        ║
║  4 ║ retail@example.com  ║ Sit Amet     ║
╚════╩═════════════════════╩══════════════╝

各電子メールは一意です。

email_templatesそして、これに似た構造を持つ2 番目のテーブル:

╔════╦══════════════════╦════════════╦══════════╗
║ id ║ email_title      ║ email_from ║ email_to ║
╠════╬══════════════════╬════════════╬══════════╣
║ 1  ║ Test title       ║ 1          ║ 3        ║
║ 2  ║ Second title     ║ 2          ║ 3        ║
║ 3  ║ Some title       ║ 1          ║ 1        ║
╚════╩══════════════════╩════════════╩══════════╝

email_toemail_from異なる場合もありますが、同じ場合もあります (例に示すように)。

私が達成したいのは、テーブルからすべてのアカウントを取得する SQL クエリを作成することですemails_accountsが、テーブルですべてのアカウントがどのくらい使用されているかという追加情報が含まれていますemail_templates(チェックする必要がemail_fromありますemail_to)。

それほど難しくないことはわかっていますが、これまでのところ、正しい結果を得ることができませんでした。現時点での私のコードは次のとおりです。

SELECT acc.* , COUNT( temp.id ) 
FROM emails_accounts acc
LEFT JOIN email_templates temp ON acc.id = temp.email_from
GROUP BY acc.email

email_fromしかし、私は両方とemail_toカウントしたいと思います。

私もこれを試しました:

SELECT acc . * , COUNT( temp.id ) + COUNT( temp2.id ) AS count
FROM emails_accounts acc
LEFT JOIN email_templates temp ON acc.id = temp.email_from
LEFT JOIN email_templates temp2 ON acc.id = temp2.email_to
GROUP BY acc.email

しかし、それはあまりにも多くの結果をもたらします。


編集:正解が含まれたフィドルを作成しました- jaczes のおかげです

4

2 に答える 2

1

どのようにそのことについて ?

SELECT ea.*,efrom, eto, ifnull(efrom,0)+ifnull(eto,0) as count 
from emails_accounts ea 
LEFT JOIN 
(select email_from,count(email_from) as efrom 
  FROM email_templates group by email_from)
as e_from on ea.id=email_from
LEFT JOIN 
(select email_to, count(email_to) as eto 
  FROM email_templates group by email_to)
as e_to on ea.id=email_to
于 2013-09-11T12:44:17.397 に答える
0

最初のクエリで次の UNION を仮想テーブルとして使用します

select  email_from  as email_id
        ,Count(*)   as template_count
from    email_templates
group by
        email_from
union        
select  email_to    as email_id
        ,Count(*)   as template_count
from    email_templates
group by
        email_to
于 2013-09-11T12:27:46.020 に答える