0

以下の SQL クエリは機能していますが、staffNo が 6 回 (スタッフ メンバーごとに 1 回) null の場合にプロパティ値を返します。staffNo が null の場合でもプロパティの所有者を返したい、6 回のリターンはありません。

SELECT s.branchNo, s.staffNo, s.fName, s.lName, propertyNo, p.staffNo,
       o.fName, o.lName, o.ownerNo
  FROM staff s, propertyforrent p, privateowner o
 WHERE s.staffNo = p.staffNo AND o.ownerNo = p.ownerNo
    OR p.staffNo IS NULL     AND o.ownerNo = p.ownerNo
 ORDER BY s.branchNo, s.staffNo, propertyNo

結果

B003    SG14    David   Ford    PG16    SG14    Tony    Shaw    CO93
B003    SG14    David   Ford    PG4     NULL    Tina    Murphy  CO40
B003    SG37    Ann     Beech   PG21    SG37    Carol   Farrel  CO87
B003    SG37    Ann     Beech   PG36    SG37    Tony    Shaw    CO93
B003    SG37    Ann     Beech   PG4     NULL    Tina    Murphy  CO40
B003    SG5     Susan   Brand   PG4     NULL    Tina    Murphy  CO40
B005    SL21    John    White   PG4     NULL    Tina    Murphy  CO40
B005    SL41    Julie   Lee     PG4     NULL    Tina    Murphy  CO40
B005    SL41    Julie   Lee     PL94    SL41    Carol   Farrel  CO87
B007    SA9     Mary    Howe    PA14    SA9     Joe     Keogh   CO46
B007    SA9     Mary    Howe    PG4     NULL    Tina    Murphy  CO40

これが望ましい結果です

B003    SG14    David   Ford    PG16    SG14    Tony    Shaw    CO93
B003    SG14                    PG4     NULL    Tina    Murphy  CO40
B003    SG37    Ann     Beech   PG21    SG37    Carol   Farrel  CO87
B003    SG37    Ann     Beech   PG36    SG37    Tony    Shaw    CO93
B005    SL41    Julie   Lee     PL94    SL41    Carol   Farrel  CO87
B007    SA9     Mary    Howe    PA14    SA9     Joe     Keogh   CO46

前もって感謝します!

4

3 に答える 3

3

左結合を使用すると役立つ場合があります

SELECT s.branchNo, s.staffNo, s.fName, s.lName, propertyNo, p.staffNo,
       o.fName, o.lName, o.ownerNo
  FROM privateowner o
  LEFT JOIN propertyforrent p ON o.ownerNo = p.ownerNo
  LEFT JOIN staff s ON s.staffNo = p.staffNo

 ORDER BY s.branchNo, s.staffNo, propertyNo
于 2013-01-23T20:51:44.530 に答える
1

これを試して:

SELECT s.branchNo, s.staffNo, s.fName, s.lName, propertyNo, p.staffNo,
       o.fName, o.lName, o.ownerNo
  FROM staff AS s LEFT JOIN propertyforrent AS p
  ON s.staffNo = p.staffNo AND  p.staffNo IS NOT NULL
  LEFT JOIN privateowner AS o
 ORDER BY s.branchNo, s.staffNo, propertyNo;
于 2013-01-23T20:56:02.107 に答える
1

これが正しいことを願っています..

SELECT s.branchNo, s.staffNo, s.fName, s.lName, propertyNo, p.staffNo, o.fName, o.lName, o.ownerNo
FROM staff s 
join propertyforrent p on s.staffNo = p.staffNo
left join privateowner o on o.ownerNo = p.ownerNo
where p.staffNo is not null
ORDER BY s.branchNo, s.staffNo, propertyNo

David Ford の下の空白の列は意図的なものですか?

于 2013-01-23T20:56:45.317 に答える