0

T-SQL を使用して特定のレコード グループを検索する方法を理解する必要があり、これを行うためのWHERE句を作成する方法を理解するのに苦労しています。

私が使用している SQL 2008 R2 システムがあり、このデータベースにはいくつかのテーブルがあります。1 つは人事記録を含み、もう 1 つは住所を含みます。アドレスは、外部キー関係によって人事レコードに関連付けられます。したがって、たとえば、すべての職員とそれに関連付けられたすべての住所のリストを取得するには (1 人の人物が複数の住所を持つ可能性があります)、次のように記述できます。

 SELECT id, name FROM personnel p
      INNER JOIN address a
      ON p.id = a.personnelid

ただし、各住所にはisprimary、0 または 1 のいずれかである という列があります。私がする必要があるのは、1 に設定された関連付けられた住所を持たないすべての担当者を見つける方法を見つけることisprimaryです。または、主要な住所を持たないレコード。

現在、プライマリとしてマークされていないアドレスを持つ担当者で一時テーブルを作成することを考えています。次に、それらを循環し、プライマリ アドレスを持つサブセットを構築します。

次に、Personnel With Non-Primary の結果から Primary を持つ Personnel テーブルを差し引くと、私のリストが得られます。ただし、これを行うにはもっとエレガントな方法が必要だと思います。何か案は?

4

3 に答える 3

0

これは最終的に左反半結合パターンになり、次のように記述できます。

SELECT id, name FROM personnel p
LEFT OUTER JOIN address a
    ON p.id = a.personnelid
    AND a.isprimary = 1
WHERE a.personnelId IS NULL

クエリ プランは同じではないことが多いため、さまざまな方法をテストすることは興味深いことです。

于 2013-11-13T22:46:50.960 に答える