1

私はこの問題を抱えています:

  • 1対多(1つのアパート、多くのテナント)の接続を持つ2つの主要なテーブル(アパート、テナント)があります。
  • 私はすべての建物のアパートを引っ張ろうとしていますが、彼のテナントの1つです。
  • 優先テナントは、ot=2 を持つテナントです (2 つの可能な値があります: 1 または 2)。
サブクエリを使用しようとしましたが、postgresql では複数の列を返すことができません。
解決方法がわかりません。これが私の最新のコードです:
SELECT a.apartment_id, a.apartment_num, a.floor, at.app_type_desc_he, tn.otype_desc_he, tn.e_name
FROM 
  public.apartments a INNER JOIN public.apartment_types at ON
  at.app_type_id = a.apartment_type INNER JOIN 
    (select t.apartment_id, t.building_id, ot.otype_id, ot.otype_desc_he, e.e_name
     from   public.tenants t INNER JOIN public.ownership_types ot ON
        ot.otype_id = t.ownership_type INNER JOIN entities e ON
        t.entity_id = e.entity_id
     ) tn ON
  a.apartment_id = tn.apartment_id AND tn.building_id = a.building_id
WHERE 
  a.building_id = 4 AND tn.building_id=4
ORDER BY
  a.apartment_num ASC, 
  tn.otype_id DESC

事前にサンクス

4

1 に答える 1

2


SELECT a.apartment_id, a.apartment_num, a.floor
      ,at.app_type_desc_he, tn.otype_desc_he, tn.e_name
FROM   public.apartments a
JOIN   public.apartment_types at ON at.app_type_id = a.apartment_type
LEFT JOIN  (
    SELECT t.apartment_id, t.building_id, ot.otype_id
          ,ot.otype_desc_he, e.e_name
    FROM   public.tenants t
    JOIN   public.ownership_types ot ON ot.otype_id = t.ownership_type
    JOIN   entities e ON t.entity_id = e.entity_id
    ORDER  BY (ot.otype_id = 2) DESC
    LIMIT  1
    ) tn ON (tn.apartment_id, tn.building_id)=(a.apartment_id, a.building_id) 
WHERE  a.building_id = 4
AND    tn.building_id = 4
ORDER  BY a.apartment_num;  -- , tn.otype_id DESC -- pointless

重要な部分が強調されました。

これはどちらの場合でも機能します。

  • アパートに入居者がいる場合は、ちょうど 1 が返されます。
  • の 1 つ (または複数) のテナントがある場合ot.otype_id = 2、そのタイプの 1 つになります。
  • テナントがいない場合でも、アパートは返却されます。

もし、ot.otype_id...

可能な値は 2 つあります: 1 または 2

...次のように簡略化できます。

ORDER  BY ot.otype_id DESC

デバッグ クエリ

WHEREベースクエリから句を削除して変更してみてください

JOIN   public.apartment_types

LEFT JOIN   public.apartment_types

それらを 1 つずつ追加して、すべての行を除外する条件を確認します。

at.app_type_ida.apartment_type本当に一致しますか?

于 2012-07-01T13:43:28.037 に答える