0

ここのほとんどの人はここで宿題の質問をする人に眉をひそめる傾向があることを私は知っています、しかし私は私のデータベースシステムクラスの1つの質問に本当に困惑しています。

  1. すべての都市をリストします(「1119レイトンアベニュー」の支社で働くスタッフが管理する賃貸物件が少なくとも1つある都市名と郵便番号。都市名の昇順で結果を並べ替えます。それ以外の場合はゼロポイント。

データベーススキーマは次のとおりです。

Branch (bNo, street, zipcode)
Staff (sNo, fName, lName, position, sex, dob, salary, bNo)
Property (pNo, street, zipcode, type, room, rent, oNo, sNo, bNo)
Owner (oNo, fName, fName, street, zipcode, phone)
Client (cNo, fName, lName, phone, prefType, maxRent)
Viewing (pNo, cNo, viewDate, cmmt)
Zip (city, state, zipcode)

そして、これは私がまとめようとしたクエリですが、非常に失敗しました...

SELECT z.city, p.zipcode
FROM Zip z, Property p
WHERE p.bNo = (SELECT bNo
                   FROM Branch
                   WHERE street = '1119 Leighton Ave');

参加に少し苦労しています。上記のこのステートメントは、正しく機能することにさえ近づいていません。私は自分の本とインターネットを掘り下げて、ある種の助けを見つけようとしています。どんな助けでも大歓迎です。前もって感謝します。

アップデート

私は現在試しています:

SELECT DISTINCT Zip.city, Zip.zipcode AS Zip
FROM Zip
    JOIN Property ON Zip.zipcode = Property.zipcode
    JOIN Branch ON Zip.zipcode = Branch.zipcode
WHERE Property.bNo = (SELECT bNo
                      FROM Branch
                      WHERE Street = '1119 Leighton Ave')
ORDER BY Zip.city;

出力はずっと良く見えますが、私はそれが正しいとは思いません。今チェックしています。

更新#2

さて、このクエリを実行することによって:

SELECT DISTINCT zipcode
FROM Property
WHERE bNo = 'B001';

FYIB001が1119LeightonAveにある支店の支店番号であるのと同じように、とにかく、そのコマンドは私に次の郵便番号を与えました。

36205
36251
36264
36206
36277
36272
36265
36203
36201

上記のコマンドを実行すると、次のようになります。

SELECT DISTINCT Zip.city, Zip.zipcode AS Zip
FROM Zip
    JOIN Property ON Zip.zipcode = Property.zipcode
    JOIN Branch ON Zip.zipcode = Branch.zipcode
WHERE Property.bNo = (SELECT bNo
                      FROM Branch
                      WHERE Street = '1119 Leighton Ave')
ORDER BY Zip.city;

これは私の出力です:

City                  Zip
--------------------- -----
ANNISTON              36206
JACKSONVILLE          36265

ですから、このクエリでは少しずれていると思います。しかし、皆さんは私に素晴らしいスタートを切ってくれました。私はそれで遊んでいきます。おそらくそれを理解できると確信しています。たくさんの人に感謝します。

みんなの助けのおかげで理解できたと思います。

SELECT DISTINCT Zip.city, Zip.zipcode AS Zip
FROM Zip
    JOIN Property ON Zip.zipcode = Property.zipcode
    JOIN Branch ON Zip.zipcode = Property.zipcode
    JOIN Staff ON Staff.bNo = Branch.bNo
WHERE Property.bNo = (SELECT bNo FROM Branch WHERE Street = '1119 Leighton Ave')
ORDER BY Zip.city
4

2 に答える 2

1

OracleでJOINクエリを作成する方法は複数あります。より標準的なSQLの方法は、次のようなことを行うことです。

SELECT t1.colNameA, t1.colNameB, t2.colNameC
FROM t1
  JOIN t1.pid = t2.fkid
WHERE
 t1.colNameA='whatever'

それを念頭に置いて、次の手順を試してみてください。

  1. 必要なすべての列をリストします。

    Zip.city、Zip.zipcodeを選択します

  2. それらの間の関係を含め、必要なすべてのテーブルをリストします。

    FROM Zip
      JOIN Property ON Zip.zipcode=Property.zipcode
      JOIN Branch ON Zip.zipCode=Branch.zipcode
      JOIN etc
    
  3. WHERE基準を追加します。

    WHERE Branch.street='1119 LeightonAve'
      AND etc
    
  4. ORDERBY句を追加します

    ORDER BY Zip.city
    

これは完全な答えではありませんが、うまくいけば正しい方向にあなたを導くのに役立ちます。

編集#2編集後、キーワード「 DISTINCT 」 を調査する必要があることをお勧めします。このようなものはあなたが探しているものよりも多いかもしれません:

SELECT DISTINCT Zip.city, Zip.zipcode
于 2012-10-01T20:58:31.220 に答える
0

これを試して

SELECT z.city, p.zipcode
FROM Zip z
     JOIN Property p ON z.zipcode = p.zipcode  -- city name and zip code where there is at least one property for rent 
     JOIN Staff s ON p.sNo = p.sNo -- managed by staff 
     JOIN Branch b ON s.bNo = b.bNo AND b.street = '1119 Leighton Ave' -- who works in the branch office at ‘1119 Leighton Ave’
ORDER BY z.city

JOIN(INNER JOIN)は、参加している両方のテーブルが少なくとも1つの行で同じ値を持っていることを確認します。そうでない場合、レコードは返されません。

于 2012-10-01T20:54:07.840 に答える