1

多対多の関係を説明するリンク テーブルを含む 2 つのテーブルがあります。

TABLE buildings
    building_id
    building_name

TABLE facility_types
    facility_type_id
    facility_type

TABLE buildings_2_facility_types
    building_id
    facility_type_id

ここで、建物ごとに施設タイプをとして含むレポートが必要です。

REPORT:

  NAME        golf    pool    garage
Building A     Y        N        Y
Building B     N        Y        Y
Building C     N        N        N

SQLでこれを行うにはどうすればよいですか?

注: これは、他の多くのテーブルを含む非常に大きなクエリの一部になります。私はそのすべてを行うことができますが、行を列に変換するのは面倒です!

4

1 に答える 1

1

行を列に変換するのは大変な作業であり、SQL はこの種の操作には適していないことを理解する必要があります。

転置される値のセットが小さく既知であり、制限されている場合は、まだ可能です。そうでない場合は、アプリケーション層に頼る必要があります。

それを行う方法の例は、3 つの条件を理解するのに役立ちます。

テーブルを仮定するとbuildings_2_facility_types:

building_id facility_type_id
    1               1
    1               2
    2               3
    3               1
    3               3

次の方法で sthg を取得できます。

SELECT
    building_id,
    IF(SUM(facility_type_id = 1) > 0, "Y", "N") as facility_type_1,
    IF(SUM(facility_type_id = 2) > 0, "Y", "N") as facility_type_2,
    IF(SUM(facility_type_id = 3) > 0, "Y", "N") as facility_type_3
FROM buildings_2_facility_types
GROUP BY building_id;

見る ?小さい知られている限られた:/

もちろん、proc ストックを使用することもできますが、通常は推奨される方法ではありません。

于 2012-06-20T07:28:01.097 に答える