1

外部キーが NULLの場合でも機能するビューを作成する方法を知りたいです。たとえば、主キーと 2 つの外部キーを持つテーブルPersonがあります。

  • IdPerson
  • FkName
  • Fk姓

どちらの外部キーも NULL にすることができます。これで、 table Nameという 2 つのテーブルも作成されました。

  • IdName
  • 名前

および表の:

  • Id姓

ここで、各 Person の名前と姓を表示するビューを作成します。

CREATE VIEW `Database`.`ViewPerson` AS 
SELECT `N`.`Name`, `S`.`Surname`
FROM `Person` `P`, `Name` `N`, `Surname` `S`
WHERE (`P`.`FkName` = `N`.`IdName`) AND (`P`.`FkSurname` = `S`.`IdSurname`)

問題は、外部キー FkSurname が NULL の場合、FkName が定義されていてもその行が表示されないことです。両方の外部キーが NULL であっても、両方の列が NULL である行を返すことを望みます。これで、Name/Surname の下に NULL を持つテーブル Name とテーブル Surname 行を追加し、FkName と FkSurname でこれら 2 つの列の下に NULL 値を持つ行を参照することで解決できることがわかりました。しかし、外部キーが NULL で行が返される解決策があるかどうかを知りたいと思います。

4

1 に答える 1

5

あなたの質問を正しく理解できれば、Person テーブルの各レコードの Name および Surname テーブルの Name および Surname フィールドに対応する値 (null の場合でも) を取得する必要があります。

これは、LEFT JOIN が正しく機能する単純なケースのように思えます。したがって、上記のクエリに基づいて、SQL は次のようになります。

CREATE VIEW Database.ViewPerson AS
SELECT
  N.Name, S.Surname
FROM Person P
  LEFT JOIN Name N ON N.IdName = P.FkName
  LEFT JOIN Surname S ON N.IdSurname = S.FkSurname;

(構文が 100% 正しくなくて申し訳ありません。それを確認するためのテスト テーブルを作成しませんでした)

于 2012-07-07T18:19:00.693 に答える