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

时间:2012-09-24 16:47:53

标签: mysql sql

我正在尝试编写一个SQL语句来检索数据库中的用户列表,以及他们的公司名称(如果他们有与之关联的公司)。但是,有一些问题:

  1. 并非所有用户都有公司,但我仍需要在列表中显示这些人。
  2. 即使用户有公司,也可以软删除该公司(该记录仍在数据库中,但标记为is_deleted = 1),我不想显示与“删除了“公司。
  3. 基本上我想从User表中选择SELECT并LEFT JOIN公司表,但是如果他们被分配到的公司是is_deleted,我根本不想要包含用户记录。

    我的第一个倾向是我必须使用UNION将两个查询合并在一起,但我希望有更清洁的方法来做到这一点?

    使用Mysql 5.1

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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