SQL 左外连接多个表

SQL left outer join multiple tables

我有三个 table,我想我需要创建一个左外连接。

国家:

country_id   country_name  
--------------------------
   15        United States  
   20        Sweden  

合作伙伴:

partner_id    partner_name  
---------------------------
   1          Atlas Group  
   2          Jenkins  
   3          Roadmap  

成员:

member_id    name    registration date    partner_id    country_id  
------------------------------------------------------------------
   001       Bob     2014-01-02                1            15  
   002       Ken     2014-05-02                3            20  

我想return统计自 2014 年以来按国家名称和合作伙伴名称注册的所有会员,包括所有没有国家名称的会员。 (所以这应该包括 country_id 为 200 的 Ken,这与 table 国家/地区的某个国家/地区不匹配。

到目前为止我有

SELECT 
    country.country_name, partner.partner_name 
FROM 
    COUNT (*) from member 
WHERE
    registration_date >= 2014-01-01

但我意识到我可能离题太远了。

提前感谢您的帮助。

类似于:

select 
    a.*
    ,p.partner_name
from
    (
        select 
            m.name
            ,c.country_name
            ,partner_id
        from 
            member as m 
            left outer join country as c
                on m.country_id = c.country_id
        where 
            registrationdate >= '2014-01-01'
    ) as a
    left outer join partner as p
        on p.partner_id = a.parner_id

当使用两个左外连接时,如果你想从 table 3 中获取匹配的行,而在 table 2 中没有匹配的行,你需要将第一个包含在子查询中。如果我没记错的话

编辑:抱歉没有看到问题的计数部分!

select 
    a.country
    ,p.partner_name
    ,count(*)
from
    (
        select 
            m.name
            ,c.country_name
            ,partner_id
        from 
            member as m 
            left outer join country as c
                on m.country_id = c.country_id
        where 
            registrationdate >= '2014-01-01'
    ) as a
    left outer join partner as p
        on p.partner_id = a.parner_id
group by 
    a.country
    ,p.partner_name

但请注意,您所有的空值都将被计算在一起..所以没有分配国家/地区的每个人都在同一个国家/地区。

除非我误解了这个问题,否则这是 2 个表的简单 LEFT JOIN。

SELECT country_name, partner_name, count(member_id)
FROM member
    LEFT JOIN partner USING (partner_id)
    LEFT JOIN country USING (country_id)
WHERE registration_date >= '2014-01-01'
GROUP BY partner_id, country_id

如果您希望合作伙伴存在,那么您可能需要将 LEFT JOIN partner ... 更改为 JOIN partner ...

您可以为 JOINs 使用 ON 语法,但是您必须在查询的其他地方限定 partner_idcountry_id 的使用。