mysql - 如何在mysql中创建具有规范化属性的 View ?

标签 mysql database database-design

我的数据库中有两张表,一张是个人的,一张是他们的属性。

CREATE  TABLE IF NOT EXISTS `person` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB

CREATE  TABLE IF NOT EXISTS `property` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `person_ID` INT NULL ,
  `property` VARCHAR(45) NULL ,
  `value` VARCHAR(45) NULL ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB

在属性表中,我会插入类似

(,1,'姓名','玛丽') (,1,'性别','女')

(,2,'姓名','约翰') (,2,'性别','男') (,2,'高度','165cm')

我将如何制作可以生成这些列的 View 语句: person_ID、姓名、性别、高度(以及可能出现的任何其他属性)

提前谢谢您,

最佳答案

试试这个。

SELECT
  p.ID, prop.name, prop.gender, prop.height
FROM
  person p
  JOIN
    (
    SELECT
      person_ID,
      MAX(IF(`property` = 'name', `value`, NULL)) AS name,
      MAX(IF(`property` = 'gender', `value`, NULL)) AS gender,
      MAX(IF(`property` = 'height', `value`, NULL)) AS height
    FROM
      property
    GROUP BY
      person_ID) prop
    ON p.ID = prop.person_ID;

请注意,在此解决方案中,所有字段和值都是硬编码的。

关于mysql - 如何在mysql中创建具有规范化属性的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6816037/

相关文章:

java - ResultSet 关闭错误后不允许操作

django - 导入错误: import dj_database_url ImportError: No module named 'dj_database_url'

数据库设计 : OR relation

mysql - GROUP_CONCAT,返回一行和空问题

mysql - Symfony 2 自引用多对多存储库

mysql - 用于存储用户配置文件的更好数据模型是什么?

php - 字符串运算,如二进制 AND

mysql - 解析期间发现非法的非几何 'aswkb(...)' 值

mysql - 为什么 "join on or"比两个 "join on"慢得多?

mysql - 如何在不刷新的情况下自动从MySQL更新数据?