1

私は4つのテーブルを持っています:

  • デパートメント
  • 領域

Aは toおよび aへdepartmentの外部キーを持っていますregionregionCountry

Atownには他のテーブルへの3つの外部キーがありますが、そのうちの1つだけを入力する必要があり、他のテーブルはnullにする必要があります。これは、外部キーを使用Countryして、departementまたは次の方法で町に到達できるためです。region

ここで、部門、地域、国 (設定されている場合) を含むすべての町を返す SQL クエリを作成したいと考えています。そして問題は、どの町の FK が設定されているかに基づいて、異なる結合を作成できないことです..

その仕事を得る方法は?

4

2 に答える 2

3

これはどう:

SELECT …
FROM Town
LEFT JOIN Department ON Department.id = Town.department
LEFT JOIN Region ON Region.id = COALESCE(Town.region, Department.region)
LEFT JOIN Country ON Country.id = COALESCE(Town.country, Region.country)

COALESCENULL引数から最初の非値を取ります。したがって、この場合、からの値はTown他の設定を上書きします。地域参照がある町には部門参照がないことを述べているので、そのうちの1つだけが非NULLである必要があります。したがって、データがあなたの言うとおりであるかどうかは順序は関係ありません。sは、一致しないテーブルの値をLEFT JOIN確実に取得します。NULL国から必要なのがそのIDだけである場合は、代わりに最後の結合を省略して、COALESCE選択した値にを含めることができます。

于 2012-11-16T12:32:34.543 に答える
0

値を表示するためのクエリを次に示します。

select town.*,Department.*,Region.*,Country.* from town,Department,Region,Country where town.Dept_Id = Department.Dept and town.Region_Id = Region.Region_Id and town.Country_Id = Country.Countr_Id and Department.Region_Id = Region.Region_Id and Region.Country_Id = Country.Country_Id

これの代わりに、左結合クエリを使用できます。このクエリは、はるかに長い実行時間を要します。左結合クエリ

select * from town left join Department ON Department.id = Town.department left join Region ON Region.id = coalesce (Town.region, Department.region) left join Country ON Country.id = coalesce (Town.country, Region.country)
于 2012-11-16T12:46:13.030 に答える