2

データベースからユーザーのリストを取得するための SQL ステートメントを作成しようとしています。ただし、いくつかの落とし穴があります。

  1. すべてのユーザーが会社を持っているわけではありませんが、これらの人々をリストに表示する必要があります。
  2. ユーザーが会社を持っていても、その会社は論理的に削除される可能性があり (レコードはデータベースに残っていますが、is_deleted = 1 のフラグが付けられています)、「削除された」会社に関連付けられているユーザーを表示したくありません。 .

したがって、基本的には、ユーザー テーブルから選択し、会社テーブルに LEFT JOIN したいのですが、ユーザーが割り当てられている会社が is_deleted の場合、ユーザー レコードをまったく含めたくありません。

私の最初の傾向は、UNION を使用して 2 つのクエリをマージする必要があるということですが、それを行うためのよりクリーンな方法があることを望んでいましたか?

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 に答える