【问题标题】:How to join multiple tables in MySQL 2?如何在 MySQL 2 中连接多个表?
【发布时间】:2015-06-19 11:16:58
【问题描述】:

我想看一个公民的全名

reportBasket,reportNoBasket 表中的 notifyEmployee ='1'

并且 reportNoBasket.groupEmail 不为空

并计算来自reportBasket 的电子邮件,citizenEmail reportNOBasket 在一个计数器中

表格:

公民(电子邮件,名字,姓氏)

reportBasket(电子邮件,notifyEmployee)

reportNoBasket(citizenEmail, notifyEmployee , groupEmail)

之前我代表我的查询以这种方式显示他们的电子邮件,效果很好:

SELECT email,count(email) as email_count 
FROM (
    SELECT email
    FROM reportBasket
    WHERE notifyEmployee='1'
    UNION ALL 
    SELECT citizenEmail
    FROM reportNoBasket
    WHERE notifyEmployee='1'
) as T
GROUP BY email
ORDER BY email ASC 

但现在我想显示公民的全名而不是电子邮件地址,例如concat(citizen.firstname,' ' citizen.lastname)

如何加入?

【问题讨论】:

    标签: mysql database join


    【解决方案1】:

    试试这样的:

    SELECT concat(firstname, ' ', lastname), count(*) as citizen_count 
    FROM (
        SELECT c.firstname, c.lastname
        FROM reportBasket rb
        JOIN citizen c
            ON rb.email = c.email
        WHERE notifyEmployee='1'
        UNION ALL 
        SELECT c.firstname, c.lastname
        FROM reportNoBasket rnb
        JOIN citizen c
            ON rnb.citizenEmail = c.email
        WHERE notifyEmployee='1'
    ) as T
    GROUP BY firstname, lastname
    ORDER BY firstname, lastname ASC 
    

    【讨论】:

    • 只需将其添加到所有 3 个 SELECT 语句和 GROUP BY
    【解决方案2】:

    我认为您仍想通过电子邮件对项目进行分组(因为它们是唯一的),然后只需加入公民表以添加名称

    SELECT email,count(email) as email_count, concat(citizen.firstname,' ' citizen.lastname)
    FROM ( SELECT email
           FROM reportBasket
           WHERE notifyEmployee='1'
           UNION ALL 
           SELECT citizenEmail
           FROM reportNoBasket
           WHERE notifyEmployee='1')as T
    LEFT JOIN citizen USING (email)
    GROUP BY email
    ORDER BY email ASC 
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT count(email) as email_count, concat(citizen.firstname,' ' citizen.lastname) as name
      FROM ( SELECT email
             FROM reportBasket
             WHERE notifyEmployee='1'
             UNION ALL 
             SELECT citizenEmail
             FROM reportNoBasket
             WHERE notifyEmployee='1')as T
      LEFT JOIN citizen USING (email)
      GROUP BY name
      ORDER BY name ASC 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-05
        • 1970-01-01
        • 2015-05-30
        • 2015-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多