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

*=* join? Is there such a thing?

我需要 运行 类似于 left/right 外连接的查询。换句话说,我需要左侧和右侧 table 的所有行。但我不需要笛卡尔积(交叉连接)。在我的例子中,我需要匹配电子邮件地址。因此,鉴于此,我必须从左侧 table 输出所有行,并在电子邮件地址上加入右侧 table,但是所有与左侧或右侧 table 都不匹配的行需要与来自相反 table 的字段的空值一起输出。有点像 = 连接(如果有的话),或者左-右外连接。

至于我试过的方法: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        |
    ------------------------------------------------------------------

它被称为"full outer join"。您的查询应如下所示:

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