代码之家  ›  专栏  ›  技术社区  ›  Dave

使用计数连接两个表

sql
  •  1
  • Dave  · 技术社区  · 16 年前

    我有两张表,定义如下:

    EMAILS
    ID       SUBJECT   BODY
    1        Test1     blah blah
    2        Test2     blah blah blah
    3        Test3     more blah
    
    ATTACHMENTS
    ID   EMAIL_ID    ATTACHMENT NAME
    1    2           TEST.DOC
    2    2           TEST.XLS
    

    我正在尝试执行一个select以返回所有电子邮件,并计算emails表中每行的附件数量(如果有的话)——最好是在一个查询中,结果类似于:

    EMAIL_ID    SUBJECT   NUM_ATTACHMENTS      BODY
        1       Test1     0                    blah blah
        2       Test2     2                    blah blah blah
        3       Test3     0                    more blah
    

    除了“正确的方法”之外,我什么都试过,如果有人有几分钟的时间来帮助我创建正确的sql来构建这个,我会非常感谢。谢谢。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    我喜欢 brydgesk's solution ,但希望尽可能不要使用子查询。
    当给定电子邮件没有附件时,此查询将显示0。

    SELECT
        a.email_id,
        e.subject,
        e.body,
        COALESCE(count(a.id),0) AS NUM_ATTACHMENTS
    FROM
        emails e
        LEFT OUTER JOIN attachments a
        ON e.id = a.email_id
    GROUP BY 
        a.email_id, e.subject, e.body
    
        2
  •  0
  •   brydgesk    16 年前

    你试过这样的东西吗?(未测试)

    SELECT
        e.id,
        e.subject,
        count(*),
        e.body
    FROM
        (SELECT *
        FROM emails e
        JOIN attachments a
        ON e.id = a.email_id)
    GROUP BY e.id, e.subject, e.body
    
        3
  •  0
  •   Thomas    16 年前

    您可以在select子句中作为一个简单的子查询执行此操作:

    Select E.ID As EMAIL_ID
        , E.SUBJECT
        , ( Select Count(*) 
            From ATTACHMENTS As A
            Where A.EMAIL_ID = E.ID ) As NUM_ATTACHMENTS
        , E.BODY
    From EMAILS As E