外键可以为 NULL 的 MySQL View

标签 mysql view foreign-keys

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

  • 个人身份
  • 名字
  • 外姓

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

  • 身份证名
  • 姓名

和表姓氏:

  • 身份证姓氏
  • 姓氏

现在我们创建 View 来显示每个人的名字和姓氏:

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 的行。现在我知道我可以通过在表名称和表姓氏行中添加来解决它,该行在名称/姓氏下具有 NULL,然后在 FkName 和 FkSurname 中引用在这两列下具有 NULL 值的行。但是我还是想看看有没有外键为NULL返回行的解决方案。

最佳答案

如果我正确理解您的问题,您希望为 Person 表中的每条记录获取 Name 和 Surname 表中 Name 和 Surname 字段的相应值(即使为空)。

这似乎是一个简单的案例,其中 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% 正确,我没有通过创建测试表来确认它)

关于外键可以为 NULL 的 MySQL View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377102/

相关文章:

python - 当前交易发生错误。在 'atomic' block 结束之前不能执行查询

java - 在 View 上画一个圆圈(android)

iOS 数据驱动以编程方式设置 View 和操作?寻求建议

mysql - InnoDB 关系 : one-way or two-way?

MySQL select char(0x542d01 using ?) 微笑问题

php - 更改查询结果数组中元素的顺序

mysql - 为什么SonarQube分析器无法与Mysql建立连接,权限问题?

android - 使用自定义适配器刷新可见的 ListView

mysql - 外键变得复杂

php - 删除父级以及子级子级中的数据时,Laravel 外键约束错误