Mysql 基于条件的混合左/右连接?
我试图编写一个SQL语句,从数据库中检索用户列表,以及他们的公司名称(如果他们有关联的公司)。然而,有几个问题:Mysql 基于条件的混合左/右连接?,mysql,sql,Mysql,Sql,我试图编写一个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