1

私はここで少し迷っています...

Unit、、、、およびから統合レコードBuildingを取得したいテーブルがいくつかあります。OwnerPicture

これまでの私の質問は次のとおりです。

SELECT building.`Street_Address`
    , building.`Building_Name`
    , building.`Building_Type`
    , CONCAT(building.`Cross_Street_1`, ' & ', building.`Cross_Street_2`) Cross_Streets
    , building.`Cross_Street_1`
    , building.`Cross_Street_2`
    , building.`Access` Building_Access
    , owner.`Company_Name`
    , owner.`Contact_Or_Reference`
    , owner.`Landlord_Phone`
    , picture.`Path_To_Picture_On_Server`
    , picture.`Picture_Category`
    , unit.`Apartment_Number`
    , unit.`Unit_Size_Number` Size
    , unit.`Is_Doorman`
    , unit.`Is_Furnished`
    , unit.`Is_Elevator`
    , unit.`Is_Pets`
    , unit.`Is_OutdoorSpace`
    , unit.`Rent_Price`
    , unit.`Baths`
    , unit.`Access` Unit_Access
    , unit.`fourd_id`
    , unit.`Updated_Date`
    , unit.`Occupancy_Date`
    , unit.`Term`
    , unit.`Incentives`
    , unit.`Info_OutdoorSpace`
    , unit.`List_Date`
    , zone.`Description`
FROM 4D_Units unit
JOIN 4D_Building building
    ON unit.`BUILDING_RecID` = building.`fourd_id`
JOIN 4D_Zones zone
    ON building.`ZONES_RecID` = zone.`fourd_id`
LEFT JOIN 4D_Owners owner
    ON unit.`OWNER_RecID` = owner.`fourd_id`
LEFT JOIN 4D_Building_Picts picture
    ON (building.`fourd_id` = picture.`BUILDING_RecID` AND picture.`Picture_Category` = 'Front')
WHERE unit.`id` = 49901

これはそのままで問題なく機能しますが、リターンレコードには、レコードに「フロント」画像のみが含まれる場合があります(存在する場合)。私の問題は、「Panorama」、「Interior」、「Floorplan」など、返品レコードに関連付けることができる写真の種類がいくつかあることです。これらはすべて、の可能な値が異なりますpicture.Picture_Category

個別のクエリを実行せずに、返されたセットにこれらの値(上記のように存在する場合)を返す方法はありますか?返されるセットに、「Front」、「Panorama」、「Interior」、および「Floorplan」の4つの可能なオプションすべてのエイリアス値(存在する場合)を含める必要がありますpicture.Picture_Category(独自の値picture.Path_To_Picture_On_Serverが関連付けられています)。

それは理にかなっていますか?

4

2 に答える 2

1

私があなたを正しく理解しているなら、あなたはあなたの結果セットに4セットの画像列を持ちたいと思います-4つのカテゴリーのリーチの1つですか?今、あなたはフロント用に1つだけ持っていますよね?

異なるエイリアスと異なる結合句を使用して、同じテーブルに複数回結合できます。4D_Building_Pictsに4回参加するだけで、必要な画像ごとに1回ずつ参加できます。

select 
    --whatever
    , pic_front.`Path_To_Picture_On_Server` AS Front_Path_To_Picture_On_Server
    , pic_panorama.`Path_To_Picture_On_Server` AS Panorama_Path_To_Picture_On_Server
    , pic_interior.`Path_To_Picture_On_Server` AS Interior_Path_To_Picture_On_Server
    , pic_floorplan.`Path_To_Picture_On_Server` AS Floorplan_Path_To_Picture_On_Server
    --whatever
FROM 4D_Units unit
JOIN 4D_Building building
    ON unit.`BUILDING_RecID` = building.`fourd_id`
JOIN 4D_Zones zone
    ON building.`ZONES_RecID` = zone.`fourd_id`
LEFT JOIN 4D_Owners owner
    ON unit.`OWNER_RecID` = owner.`fourd_id`
LEFT JOIN 4D_Building_Picts pic_front
    ON (building.`fourd_id` = pic_front.`BUILDING_RecID` AND pic_front.`Picture_Category` = 'Front')
LEFT JOIN 4D_Building_Picts pic_panorama
    ON (building.`fourd_id` = pic_panorama.`BUILDING_RecID` AND pic_panorama.`Picture_Category` = 'Panorama')
LEFT JOIN 4D_Building_Picts pic_interior
    ON (building.`fourd_id` = pic_interior.`BUILDING_RecID` AND pic_interior.`Picture_Category` = 'Interior')
LEFT JOIN 4D_Building_Picts pic_floorplan
    ON (building.`fourd_id` = pic_floorplan.`BUILDING_RecID` AND pic_floorplan.`Picture_Category` = 'Floorplan')
WHERE unit.`id` = 49901
于 2011-02-04T17:26:25.770 に答える
0

合体機能が欲しいと思います。複数のフィールドを受け取り、null以外の最初のフィールドを返します。だから次のようなもの:

Select
  Coalesce(A.Panorama, A.Interior, A.Floorplan, '') as ImagePath
From
  Table A

ただし、この方法では1つの値しか得られませんが、実際にはそれが求めているものではない可能性があります。それらすべてが必要な場合は、次のように相関サブクエリを使用することをお勧めします。

Select
  (Select P.Path_To_Picture From 4D_Building_Picts P where P.Building_RecID = B.fourd_Id And P.Picture_Category = 'Front') as Front_Pic,
  (Select P.Path_To_Picture From 4D_Building_Picts P where P.Building_RecID = B.fourd_Id And P.Picture_Category = 'Panorama') as Panamora_Pic,
  (Select P.Path_To_Picture From 4D_Building_Picts P where P.Building_RecID = B.fourd_Id And P.Picture_Category = 'FloorPlan') as FloorPlan_Pic,
  ...
From
  4D_Building B
于 2011-02-04T17:11:32.107 に答える