MySQL查看外键可以为NULL的位置

时间:2012-07-07 17:18:47

标签: mysql view foreign-keys

我想知道如何创建即使外键为NULL 也可以工作的视图。例如,我们有表 Person ,它有一个主键和两个外键:

  • IdPerson
  • FkName
  • FkSurname

两个外键都可以为NULL 。现在我们还有两个表,表名称

  • IdName
  • 名称

表格姓氏

  • IdSurname

现在我们创建视图以显示每个人的名字和姓氏:

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的行。现在我知道我可以通过添加表名和表Surname行来解决它,在Name / Surname下有NULL,然后在FkName和FkSurname中引用在这两列下有NULL值的行。但我仍然想知道是否有一个解决方案,其中外键为NULL并返回该行。

1 个答案:

答案 0 :(得分: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%正确,我没有通过并创建一个测试表来确认它)