2

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

  1. 并非所有用户都有公司,但我仍然需要在列表中显示这些人。
  2. 即使用户拥有一家公司,该公司也可能被软删除(该记录仍在数据库中,但标记为 is_deleted = 1),并且我不想显示与“已删除”公司相关联的用户.

所以本质上我想从用户表中选择并左连接公司表,但如果他们被分配给 is_deleted 的公司,我根本不想包含用户记录。

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

使用 MySQL 5.1

4

2 回答 2

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 得到没有被软删除的公司的用户。

于 2012-09-24T18:31:06.647 回答
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
于 2012-09-24T16:51:28.363 回答