-2

私の目的は、支店の町で管理されているプロパティ、プロパティの詳細、およびこれらのプロパティに対して実行された検査の数に関する VIEW を作成することです。正しい SELECT クエリを作成したと思いますが、それらを結合するのに問題があります。

私が使用しているテーブルは

  1. YR_property - 主キー - 'propertynum' 、外部キー - branchnum
  2. YR_branch - 主キー - branchnum
  3. YR_inspection - 主キー 1 - プロパティ番号、主キー 2 - 検査日。

これは私が管理したものです...

SELECT area, city
From YR_branch

SELECT propertynum, COUNT (propertynum)  FROM yr_inspection
GROUP BY propertynum

SELECT propertynum, branchnum, area, city, postcode, prop_type, rooms
FROM YR_property

繰り返しますが、SELECT ステートメントを結合しようとしています。私が受けるかもしれない助けをありがとう!

4

2 に答える 2

1

最初と 3 番目のクエリは、単純な JOIN で結合できます。次に、サブセレクトを使用して 3 番目をマージできます。このようなものが動作するはずです:

SELECT * FROM (
    SELECT propertynum, COUNT (propertynum) 
    FROM yr_inspection GROUP BY propertynum
) a,
(
    SELECT b.area, b.city, p.propertynum, p.branchnum, 
           p.area, p.city, p.postcode, p.prop_type, p.rooms 
    FROM YR_property p, YR_branch b
    WHERE p.branchnum = b.branchnum
) b
where a.propertynum = b.propertynum;
于 2013-04-26T14:09:22.497 に答える
1

ここに解決策があります:

select p.propertynum, p.branchnum, p.area, p.city, p.postcode, p.prop_type, p.rooms,
       b.area, b.city, coalesce(i.NumInspected, 0)
from yr_property p join
     yr_branch b
     on p.branchnum = b.branchnum left outer join
     (select propertynum, count(*) as NumInspected
      from yr_inspection i
      group by propertynum
     ) i
     on i.propertynum = p.propertynum;

これは、ANSI 標準の結合構文を使用してテーブルをまとめます。検査テーブルは、プロパティの検査数を取得するために、結合の前に最初に集計されます。

これleft outer joinにより、インスペクションがなくても、すべてのプロパティが含まれるようになります。coalesce()は、NULL ではなく 0 などの場合の検査回数を示します。

本当にSQLビューが必要な場合は、.create view <your view name here> asの前に置くだけselectです。

于 2013-04-26T14:47:32.687 に答える