Mysql 基于条件的混合左/右连接?

Mysql 基于条件的混合左/右连接?,mysql,sql,Mysql,Sql,我试图编写一个SQL语句,从数据库中检索用户列表,以及他们的公司名称(如果他们有关联的公司)。然而,有几个问题: 并非所有用户都有公司,但我仍然需要在列表中显示这些人 即使用户有一家公司,也可以软删除该公司(该记录仍在数据库中,但标记为is_deleted=1),我不想显示与“已删除”公司关联的用户 因此,本质上我想从用户表中选择并左键加入公司表,但如果分配给他们的公司被删除,我根本不想包括用户记录 我的第一个倾向是我必须使用一个联合来将两个查询合并在一起,但我希望有一种更干净的方法来实现这一点

我试图编写一个SQL语句,从数据库中检索用户列表,以及他们的公司名称(如果他们有关联的公司)。然而,有几个问题:

  • 并非所有用户都有公司,但我仍然需要在列表中显示这些人
  • 即使用户有一家公司,也可以软删除该公司(该记录仍在数据库中,但标记为is_deleted=1),我不想显示与“已删除”公司关联的用户
  • 因此,本质上我想从用户表中选择并左键加入公司表,但如果分配给他们的公司被删除,我根本不想包括用户记录

    我的第一个倾向是我必须使用一个联合来将两个查询合并在一起,但我希望有一种更干净的方法来实现这一点


    使用Mysql 5.1

    尝试加入一个不包括已删除公司的表:

    SELECT U.Name, C.Name 
    FROM User U LEFT OUTER JOIN 
        (SELECT CompanyId, CompanyName 
         FROM Company 
         WHERE is_deleted = 0) 
    C ON U.CompanyId = C.CompanyId
    

    C.id为NULL获取没有公司的用户,C.IS_deleted=0获取没有被软删除的公司的用户。

    但我还想包括根本没有分配公司的用户。这种方式似乎只显示拥有公司的用户,这可以通过传统的内部连接完成。然后,您可以将内部连接更改为左外部连接。我已经更新了我的答案。
    SELECT U.name Username, C.name Company
    FROM User U
    LEFT OUTER JOIN Company C
    ON U.companyid = C.id
    WHERE C.id IS NULL OR C.is_deleted = 0