マップに配置されたオブジェクトに関する情報を格納するために使用されるMapObjectsというテーブルがあります。組織があるすべての場所を格納するために使用されるOrgLocationsという別のテーブルがあります。場所は緯度と経度で定義されています。最後に、MapオブジェクトをOrgLocationsテーブルの有機体にマップするObjectLocationsという別のテーブルがあります。マップ上に表示されるオブジェクトの場所のサブセットを示すために使用されます。T-SQL:条件付き結合または畳み込みWHERE節?
組織(OrgID = 10)に4つの場所(OrgLocationsテーブルに格納されている)があるとします。Dallas、Atlanta、Miami、New York。 組織にはAtlantaとMiami(MapObjects.ID = 5)に関連付けられた1つのマップオブジェクトがあります。
私のデータセットは、AtlantaとMiamiに対応するOrgLocationsのレコードを返す必要があります(DallasまたはNew Yorkは含まれません)。しかし、私は任意の場所(ObjectLocationsのレコードなし)に割り当てられていないマップオブジェクトを持つこともできます。これらのマップオブジェクトは依然として組織に属していますが、特定の場所には関連付けられていません。この場合、私は組織に割り当てられたすべての場所を返すことにします。
これが条件付き結合またはWHERE句の中で実行されるかどうかはわかりません。ここにテーブルがいくつかのデータをどのように見えるかです:
OrgLocations
ID OrgID Latitude Longitude Name
0 10 32.780 -96.798 Dallas
1 10 33.7497 -84.394 Atlanta
2 10 25.7863 -80.2270 Miami
3 10 40.712 -74.005 New York
4 11 42.348 -83.071 Detroit
ObjectLocations
OrgLocationID MapObjectID
1 5
2 5
この例ではMapObjectsの
ID OrgID
5 10
6 11
、MapObjects.IDは5でありますこのオブジェクトの2つの場所がObjectLocations:AtlantaとMiamiに存在します。 MapObjects.IDが6の場合、ObjectLocationsにレコードが存在しないため、組織に属するOrgLocatonsのすべての場所(OrgID = 11)が返されます。
ありがとうございました!
+1あなたはいくつかの結合を行うことができますが、そのクエリは動作します:) –
@aF「where ... in」結合を参照していると思います。私は、関係するテーブルのプライマリ・キー/ユニーク制約を知らなくても、ジョインを使って少し安全ではないと感じました。この方法では、出力に重複する場所はありません。 –
実際には、結果セットをサブクエリとして含める必要があるため、If ... elseは機能しません。 – AndroidDev