* = *加入?有这样的事吗?

时间:2019-06-12 18:01:23

标签: sql sql-server tsql outer-join

我需要运行类似于左/右外部联接的查询。换句话说,我需要左表和右表中的所有行。但是我不需要笛卡尔积(交叉联接)。就我而言,我需要匹配电子邮件地址。因此,鉴于此,我必须输出左表中的所有行,在电子邮件地址上加入右表,但所有与左表或右表都不匹配的行也需要输出,并且对面的桌子。如果存在这种情况,则有点像 = 联接,或者是左向右外部联接。

至于我尝试过的:Google搜索。但是什么也没找到。交叉应用可能有效,但我无法绕开与连接有何不同之处。

理论左右连接示例:

    select users.*, contacts.*
    from users
    left-right join contacts on users.emailAddress = contacts.emailAddress

因此,如果用户包含:

    ----------------------------------
    |emailAddress        | firstName |
    ----------------------------------
    |k@company.com       | ken       |
    |b@enterprise.com    | bill      |
    |j@establishment.com | joe       |
    ----------------------------------

联系人包含:

    --------------------------------
    |emailAddress       | optedOut |
    --------------------------------
    |z@bigcompany.com   |  0       |
    |b@enterprise.com   |  1       |
    |h@smallcompany.com |  1       |
    --------------------------------

输出应如下所示:

    ------------------------------------------------------------------
    |emailAddress        | firstName |emailAddress        | optedOut |
    ------------------------------------------------------------------
    |k@company.com       | ken       | NULL               | NULL     |
    |b@enterprise.com    | bill      | b@enterprise.com   | 1        |
    |j@establishment.com | joe       | NULL               | NULL     |
    |NULL                | NULL      | z@bigcompany.com   | 0        |
    |NULL                | NULL      | h@smallcompany.com | 1        |
    ------------------------------------------------------------------

1 个答案:

答案 0 :(得分:2)

这称为“完全外部联接”。您的查询应类似于:

select users.*, contacts.*
from users
full outer join contacts on users.emailAddress = contacts.emailAddress